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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高丽华 中级黑马   /  2014-1-19 10:29  /  1618 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

学完了类加载器,自己还是有不懂得地方,类加载器和自定的类加载有什么区别呀!

5 个回复

倒序浏览
在java中可以有多个类加载器,默认有三个主要的类加载器,
BootStrap , ExtClassLoader , AppClassLoader

java中所有的类都由类加载器加载进内存,
类加载器本身也是java类,而类加载器是由BootStrp来加载
BootStrp不是java类,它是嵌在java虚拟机中的

所有的类加载器都采用具有父子关系的树形结构进行组织
在实例化一个类加载器对象时,需要为其指定一个父级类加载器
不指定,默认是系统加载器指定为其父级类加载器

每个类加载器都管辖一个范围
BootStrap 只在 jre/lib/rt.jar中找需要加载的类
ExtClassLoader 只在 jre/lib/ext中找需要加载的类
BootStrap 只在 classpath指定的目录中找需要加载的类

当java虚拟机在加载一个类时,首先会用当前线程的类加载器去加载线程中的第一个类
当类A中引用了类B,java虚拟机会用加载类A的类加载器去加载类B,如果没有找到类B,就会抛出ClassNotFoundException
还可以手动指定类加载器去加载某个类,ClassLoader.loadClass();

每个类加载器加载类时,又先委托给其父级类加载器
如果有父级类加载器,找到了这个类,直接用父级类加载器去加载
如果所有的父级类加载器都没有找到这个类,则回到发起者类加载器,
如果没有找到就会抛出ClassNotFoundException,而不会去让子级类加载器去找这个类

而自定义类加载器可以指定目录加载类,也可以在用的过程中把路径传进来,在类加载器内部处理传进来 的字符串,获取类名

评分

参与人数 1技术分 +1 收起 理由
黄晓鑫 + 1

查看全部评分

回复 使用道具 举报
如视频上讲的,自定义类加载器可以实现加密解密的功能,而系统默认的类加载器是定义好的,当然也就不能实现机密自己的字节码了。

功能不止,加密解密,使用字节的类加载器更灵活,方便
回复 使用道具 举报
§傻、才乖 发表于 2014-1-19 12:28
在java中可以有多个类加载器,默认有三个主要的类加载器,
BootStrap , ExtClassLoader , AppClassLoader

三个主要类加载器是干什么的?
回复 使用道具 举报
每个类加载器都管辖一个范围
BootStrap 只在 jre/lib/rt.jar中找需要加载的类
ExtClassLoader 只在 jre/lib/ext中找需要加载的类
BootStrap 只在 classpath指定的目录中找需要加载的类

上边有写的
回复 使用道具 举报
说通俗点,就是一般我们自己写的普通类,都是在 classpath指定的目录中(classpath即.class文件所放的目录或jar),是用APPClassLoader类加载器加载的;而像java自带的类一般是由BootStrap加载的,例:System类是由BootStrap类加载器加载的。
ExtClassLoader类加载器一般加载的是扩展类。
而我们自定义的类加载器是加载我们自己指定目录里的类文件,可以用于加密解密我们自己想加密的.class 文件。

其实一般我们自己写的类都是在 classpath指定的目录中,用APPClassLoader类加载器加载就可以了(都是自动加载的)。类加载器的作用,加载.class文件。.class文件只有被类加载器加载了才能被执行,编译和执行是两个过程。(如果我的回答对你有些帮助,请给我加一分,因为我现在急需技术分入学)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马