黑马程序员_类加载器小结

----------android培训java培训、期待与您的交流----------

1、定义
类加载器就是加载类的工具。


2
、作用
将.class文件中的内容变为字节码加载进内存,并为之生成对应的java.lang.Class对象。
3
、默认类加载器:
       1
)Java虚拟机中可安装多个类加载器,系统默认的有三个主要的,每个类负责加载特定位置的类:BootStrap、ExtClassLoader、AppClassLoader
       2
)类加载器本身也是Java类,因为它是Java类的加载器,本身也需要被类加载器加载,显然必须有第一个类加载器而不是java类的,这正是BootStrap。它是嵌套在Java虚拟机内核中的,已启动即出现在虚拟机中,是用c++写的一段二进制代码。所以不能通过java程序获取其名字,获得的只能是null。
4
、Java虚拟机中的所有类加载器采用父子关系的树形结构进行组织,在实例化每个类装载器对象时,需要为其指定一个父级类装载器对象或者默认采用系统类装载器为其父级类加载。
5
、当JVM启动时,会形成由3个类加载器组成的初始类加载器层次结构。
(1)Bootstrap ClassLoader:根类加载器;它负责加载Java的核心类;它并不是java.lang.ClassLoader的子类,而是由JVM自身实现的。

(2)Extension ClassLoader:扩展类加载器;它负责加载JRE的扩展陌路中的JAR包中的类。
(3)System ClassLoader:系统类加载器;它负责在JVM启动时加载来自java命令的-classpath选项、java.class.path系统属性,或者CLASSPATH环境变量所制定的JAR包和类路径。 
6
、类加载机制
JVM
的类加载机制主要有如下三种机制:
(1)全盘负责:指当一个类加载器负责加载某个Class时,该Class所依赖的和引用的其它Class也将有该类加载器负责载入,除非显式使用另外一个类加载器来载入;
(2)父类委托:指先让父类加载器视图加载该Class,只有在父类加载器无法加载该类时才尝试从自己的类路径中加载该类;
(3)缓存机制:指所有加载过的Class都会被缓存,当程序中需要使用某个Class时候,类加载器先从缓存区中搜寻该Class,只有当缓存去中不存在
该Class对象时候,系统才会读取该类对应的二进制数据,并将其转换成Class对象,存入缓存区中。这就是为什么修改了Class后,必须重新启动JVM
程序所做的修改才会生效的原因。

简单地说:

发起者往上提交请求,找不到在退回发起者

简单测试:

ClassLoader cl = ClassLoaderTest.class.getClassLoader();
		while (cl != null) {
			System.out.println(cl.getClass().getName());
			cl=cl.getParent();
		}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值