java默认的classloader:
1.BootStrap ClassLoader:称为启动类加载器,是Java类加载层次中最顶层的类加载器,负责加载JDK中的核心类库,如:rt.jar、resources.jar、charsets.jar等,可通过如下程序获得该类加载器从哪些地方加载了相关的jar或class文件。
2.Extension ClassLoader:称为扩展类加载器,负责加载Java的扩展类库,默认加载JAVA_HOME/jre/lib/ext/目下的所有jar。
3.App ClassLoader:称为系统类加载器,负责加载应用程序classpath目录下的所有jar和class文件。
java的classloader采用的双亲委托机制,每个classloader实例都包含一个父classloader的引用,顶层classloader没有父类加载器,双亲机制原理如下:
当需要加载某个类时,自上而下,先由父加载器进行加载,如果没有再往下逐级查找加载,直到委托者加载某个类,如果还没找到,直接抛出classnofound异常。
classloader和class完全相同时,jvm才认为这个类是相同的,否则会出现类型转换异常。