类加载器:Bootstrap---------->ExtClassLoader---------->AppClassLoader
jdk1.6.0_16\jre\lib\ext
java类加载器加载.class文件并经过处理后生成最后的字节码
每个类加载器负责加载特定位置的类
类加载器也是java类,显然必须有一个不是java类的类加载器,这个就是Bootstrap
ClassLoaderTest.class.getClassLoader().getClass().getName();//AppClassLoader
System.class.getClass();//null 说明System这个类是由Bootstrap加载的
自定义类加载器(挂接到AppClassLoader下)实现自定义特殊目录下class文件的加载,可以同时定义加载方式如加密、解密
类加载器的委托机制:
首先当前线程的类加载器(Thread类的setContextClassLoader方法)去加载线程中的第一个类
如果类A中引用了类B,java虚拟机将使用加载类A的类加载器去加载类B
还可以直接调用ClassLoader.loadClass()来指定某个类加载器去加载某个类
每个类加载器加载类时,又会先委托给其上级的类加载器(统一管理,避免出现重复加载一个class文件的情况)
当所有祖宗没有加载到类,回到发起者类加载器,还加载不到,则会抛ClassNotFound Exception |