Java的类加载机制(源代码文件*.java -> 词法分析器 -> tokens流 -> 语法分析器 -> 语法树/抽象语法树 -> 语义分析器 -> 注解抽象语法树 -> 字节码生成器 -> JVM字节码文件*.class
)
1.类加载的前提将编写好的源文件.java转为.class二进制字节码文件,再给内存执行字节码文件中的类
2.源文件.java > 编译 >字节码文件.class文件 > jvm(Java虚拟机)执行字节码文件中的类 >转为机器码
3. 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转化解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制
4.类加载器的双亲委托机制加载类
启动类加载
扩展类加载
本地类加载
当接受到要加载类的时候,也就是jvm要将Class文件中的类加载到内存时,就会启动双亲委托机制
1.本地类接受到加载类指令,但不做处理,交给父级扩展类
2.扩展类接受到加载类指令,也不做处理,交给父级启动类加载
3.启动类接受到命令后,直接处理,在它的搜索范围jre/lib/rt.jar中加载,如果没有加载到则传给儿子级扩展类
4.扩展类接受到上级的指令,也开始加载自己的范围jre/lib/ext/*.jar,如果没有则同样往下传
5.本地类接受到上级的指令后,最后开始自己加载立刻执行加载ClassPath下的类,如果加载到则在mian方法中执行,如果没有则报异常ClassNotFindException类