Java类加载

Java类加载机制

类加载器:
1、启动类加载器(C++实现的)
加载JDK/JRE/LIB目录下的,以java.开头的类
2、扩展类加载器
加载JDK/JRE/LIB/EXT 目录下的 以javax.开头的类
3、系统类加载器
4、自定义类加载器
自己定义的类,通过这个加载器加载

类加载条件:
Java类的加载是一个按需加载的过程,当出现以下情况时,类才会被加载:
1、创建了类的实例
2、访问了某个类或接口的静态变量,或者对该变量赋值
3、调用了类的静态方法
4、反射
5、初始化一个类的子类(会先初始化其父类)
6、与文件名相同的类会在启动时自动加载

类加载过程:
1、加载
查找并加载类的二进制数据(class文件)。
方法区:类信息
堆:类的实例
2、验证
验证类加载的信息没有错误
3、准备
为类的静态变量初始化,分配空间并且赋初值
4、解析
将符号应用转换成直接引用
5、初始化
JVM对类进行初始化,对静态变量赋予真实值

双亲委派机制:
当一个类加载器收到一个类加载请求时,不会马上加载这个类,而是把请求委托上一级加载器,依次向上,直到委托给最顶层的启动类加载器。当最上层加载器 无法在它的范围内找到所需的类时,就依次向下,由下层去加载,直到该类被加载。

为什么要使用双亲委派机制:
防止系统类被人为定义的类替换。比如当我们自定义一个名为String的类,实例化一个对象时,由于双亲委派机制它最终会被委托给启动类加载器,但是我们自定义String类不属于启动类加载器的加载范围,最终又会被层层向下,由自定义类加载器去进行加载!这样,就不会替代掉系统的String类。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值