Java类加载器

原创 2004年09月10日 16:01:00

Java类加载器:

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

引导类加载器――加载系统核心类,没有任何ClassLoader对象与核心类加载器对应,例如:

String.class.getClassLoader()返回null

 

扩展类加载器――加载在lib-ext下的类。它是用java来实现的。存在class.forname()的缺陷

系统类加载器――从当前目录加载或者在clsspath环境变量中指定的位置搜索zip/jar,或者由-classpath指定的jar

 

类加载器的父子关系:每个类加载器都有一个父加载器(除引导。。),根据规定类加载器先让父加载器加载,在父加载器失败时再由自己加载。当然你可以在自定义的类加载器中修改这一默认行为。

 

显式加载 隐式加载  通过类加载器加载,默认加载器是与调用者的加载器相同,可以通过loader.loadClass()用新的加载器加载。

 

class.forname()的缺陷:在lib/ext目录下的类如果使用了class.forName()将会遇到麻烦,因为此时这个调用不会调用系统类加载器。

 

ClassLoader.getSystemClassLoader可以获得系统类加载器

Thread.cureentThread().getContxtClassLoader()多线程环境下。。。

 

自定义类加载器:

覆盖findClass(String classname)方法:在其中加载字节码,调用defineClass(…..)来定义类。

 

字节码校验器:防止对(编译之后的)字节码进行的非法修改

 

收藏助手
不良信息举报
您举报文章:Java类加载器
举报原因:
原因补充:

(最多只允许输入30个字)