面经-虚拟机-类加载

类加载

类加载过程

1.加载

①将类的字节码载入方法区,并创建.class对象。

②如果此类的父类没有加载,先加载父类。

③加载是懒惰执行。

2.链接

①验证-验证类是否符合字节码规范,合法性、安全性检测。

②准备-为static变量分配空间,设置默认值。

③解析-将常量池的符号引用解析为直接引用。

3.初始化

①执行静态代码块与非final静态变量赋值。

②初始化是懒惰执行。

双亲委派

双亲委派:优先委派上级类加载器进行加载,

如果上级类加载器

①能找到这个类,则由上级加载,加载后该类也对下级加载器可见。

②找不到这个类,则下级类加载器才有资格执行加载,权力下放。

下级类加载器加载的类对上级不可见。

名称加载哪的类说明
Bootstrap ClassLoader 启动类加载器JAVA_HOME/jre/lib无法直接访问
Extension ClassLoader 扩展类加载器JAVA_HOME/jre/lib/ext上级为Bootstrap,显示为null
Application ClassLoader 应用程序类加载器classpath上级为Extension
自定义类加载器自定义上级为Application

可以自己写一个java.lang.System吗

不行。

1.假设你自己的类用双亲委派,那么优先由启动器加载真正的System。

2.假设不用双亲委派,那么类加载器加载假冒的System时会先加载父类java.lang.Object,没有用委派的话找不到Object,会失败。

3.实际操作中类加载器加载java打头的类,会抛安全异常。

4.jdk9以上版本对特殊包名与模块绑定,编译不通过。


双亲委派的目的

1.让上级类加载器中的类对下级共享(反之不行),即能让你的类依赖到jdk提供的核心类。

2.让类的加载有优先次序,保证核心类优先加载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值