您的位置:首页 > 编程语言 > Java开发

java类加载器

2016-03-07 21:29 316 查看
一、什么是类加载器?

类加载器就是加载类的工具,当我们在java程序里面用到一个类,jvm首先将java的字节码.class文件加载到内存里面去,通常这些字节码是放在 classpath目录下。

二、jvm中的三个类加载器

jvm中可以安装过个类加载器,系统默认提供了三个主要的类加载器,每个类加载器负责加载特定位置的类。

类加载器也是java类,它是由BootStrap类加载器加载的。BootStrap不是一个java类,所以它不需要java类加载器加载。它是嵌套在jvm内核里面的,由c++写的一段二进制代码。当jvm启动时,它就加载了。

jvm给我们提供的三个类加载器分别是:BootStrap,ExtClassLoader,AppClassLoader,它们组成一个树状结构。我们还可以写自己的类加载器,挂到这个树上。



三、类加载器的委托机制

由当前线程的类加载器加载第一个类,如果这个类还引用了其他类,那么也是由加载第一个类的类加载器来加载引用的类。

还可以直接使用ClassLoader.loadClaa()来指定某个类加载器加载某个的类。

当我们派出第一个类加载器加载第一个类时,它会交给上一级类加载器,上一级继续交给上一级,直到到达顶级类加载器,然后再去找,找不到时,再往下退一级去找,如果退到第一个派出的类加载器时,仍然找不到,就报异常了。这样的好处是可以集中管理,不会出现多份字节码的现象。

四、你能不能自己写一个类,叫java.lang.System?

通常不可以,原因是委托机制会交给BootStrap去找java.lang.System,它会在jre/lib/rt.jar中找到java.lang.System,所以并不会加载到我们自己写的java.lang.System。当然我们可以自己写一个类加载器,不委托给上级,指定加载我们的类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: