多个java文件经过编译打包生成可运行jar包,最终由java命令运行某个主类的main启动程序,这里需要先通过类加载器把主类加载到JVM
主类在运行过程中如果使用到其他类,会逐步加载这些类。
注意:jar包里的类不是一次性全部加载的,是使用到时才加载,不过类似于java.lang.Object这种支持JVM运行的类会在启动时便被加载。
类加载过程
加载>>验证>>准备>>解析>>初始化>>使用>>卸载
二、类加载器和双亲委派机制
类的加载主要通过类加载器来实现,java中的类加载器如下:
类加载器示例:
双亲委派机制的逻辑大致如下:
1.首先加载指定名称的类是否已被加载过,如果加载过就不需要重复加载,直接返回。
2.如果此类没有被加载,那么判断是否有父类加载器,如果有,则委派给父加载器加载,如果没有则直接委派给启动类加载器加载。
3.如果父加载器及bootstrapClassLoader均没有找到目标类则有当前类加载器的findClass完成加载。
总结:加载器加载时将加载动作逐级向上委托直到最高级的启动类加载器,再从最高级向下逐级进行目标类加载,如果在某一级加载到了目标类则不再向下继续。
设计双亲委派机制的目的:
在自定义类加载器示例:
自定义类加载器主要是重写findclass()方法:
打破双亲委派机制
如果要打破双亲委派机制只需要重写loadClass()这个方法
测试类:
Original: https://www.cnblogs.com/qishanmozi/p/c332d9e7c0c72831e4a4b0ae9f19e8f4.html
Author: 祁山墨子
Title: 类加载机制深度解析
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/608663/
转载文章受原作者版权保护。转载请注明原作者出处!