标签:委派 java 虚拟机 面经 System 双亲 上级 加载
类加载
类加载过程
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.让类的加载有优先次序,保证核心类优先加载。
标签:委派,java,虚拟机,面经,System,双亲,上级,加载 来源: https://www.cnblogs.com/lysboke/p/16628324.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。