黑马程序员技术交流社区

标题: 关于类加载器 [打印本页]

作者: 黑马陈旭东    时间: 2012-7-15 21:30
标题: 关于类加载器
老毕常说:给机会让你喷一喷原理:

我想问:
什么是类加载器?
什么情况下用到类加载器?

作者: 王璐    时间: 2012-7-15 21:48
源代码需要加载进内存,这时就需要类加载器。系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader,AppClassLoader。
类加载器也是Java类,因为其他java类的类加载器本身也要被类加载器加载,显然必须有第一个类加载器不是不是java类,这正是BootStrap。
你可以用自己的类加载器加载自己的特定类,比如你写一个类,但这个类已经加过密,如果用系统的默认类加载器加载,就会出错。所以就可以将解密代码写入自定义类加载器,再将其挂到默认的类加载器上。


作者: 陆鹏    时间: 2012-7-15 22:02
本帖最后由 陆鹏 于 2012-7-15 22:04 编辑

       简单来讲,类加载器是将类加载进内存,也就是将类文件从硬盘复制到内存,因为只有将类文件在内存存在才能被cpu运行。
至于什么情况下用到类加载器。那当然是用到类的时候就用到类加载器。
比如说返回字节码对象,也就是返回Class类型的对象。有两种情况:

一。字节码没有被加载,此时虚拟机的类加载器就加载这个类的字节码,然后将字节码缓存
在虚拟机中,以后得到此字节码就不需加载了。
         如:Class.forNmae("java.util.Date"),Date这个类之前没有用过,没有在内存中存在,此时要用它就必须先加载进内存。
二。被加载过,直接返回。比如  Date d = new Date()  ------->此处建立对象要加载类进内存
                                                  Class c =  d.getClass();-------->Date类在上面已经加载过了,所以就不用加载了

上面涉及到反射的知识,楼主如果不懂的话可以先留着,学到了反射再看看自然能体会了。

希望浅显之见能使楼主解惑。
作者: 柯玲    时间: 2012-7-15 23:49
类加载器就是一个加载类的工具
我们知道java类首先要翻译成一个个的.class文件,这些.class文件再进入内存,整个程序才能跑起来。
那么类加载器就充当一个搬运工的角色,把未加入内存的.class文件从硬盘搬到内存中堆起来,而且这个过程在程序运行生命周期内只需要一次。这样就提高了程序的运行效率




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2