A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马陈旭东 中级黑马   /  2012-7-15 21:30  /  1350 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

老毕常说:给机会让你喷一喷原理:

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

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

3 个回复

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

回复 使用道具 举报
本帖最后由 陆鹏 于 2012-7-15 22:04 编辑

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

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

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

希望浅显之见能使楼主解惑。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
类加载器就是一个加载类的工具
我们知道java类首先要翻译成一个个的.class文件,这些.class文件再进入内存,整个程序才能跑起来。
那么类加载器就充当一个搬运工的角色,把未加入内存的.class文件从硬盘搬到内存中堆起来,而且这个过程在程序运行生命周期内只需要一次。这样就提高了程序的运行效率
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马