一说Java代码的执行, 接触过Java代码的同学肯定会想到: 编写, 编译, 运行这三个阶段. 其中:
编写: 是在后缀名为.java的文件中, 根据Java语法规则编写源代码.
编译: 是将.java文件(源代码文件)编译成.class文件(字节码文件).
运行: 是通过JVM来执行.class字节码文件.
大白话解释: .Java文件是程序员能看懂, 但是计算机看不懂的文件. 需要先把它转换成.class文件, 计算机才能识别, 从而来执行. 虽然这三个阶段都可以通过IDE实现, 但是好多人容易忽略一个细节, 那就是: 在JVM执行.class字节码文件之前, 需要先通过”类加载器”将该字节码文件加载到内存中, 而这个过程, 就是我们要详聊的话题.
本文会从以下3点来介绍”Java中的”类加载器:
1. 类加载器的概述.
2. 类加载器的分类.
3. 类加载机制.
首先, 我们先来聊下类加载器的概述, 类加载器(ClassLoader)是负责加载类的对象的, 也就是将.class字节码文件加载到JVM内存中的. 那它什么时候才会去加载.class字节码文件呢? 答案是: 当Java程序第一次使用某个类中的内容, 而该类的字节码文件在内存中不存在时, 类加载器就会去加载该类的字节码文件.
俗话说”渡人先渡己”, 要想成为别人的榜样, 帮助别人. 首先要做好自己. 生活中如此, 类加载器也一样. 要想加载我们自定义的类, 类加载器必须先完成”自加载”的过程. 聊到这, 不得不提的就是”类加载器的分类”了.
Java中的类加载器主要分为以下四类:
1. 根类加载器(BootStrapClassLoader), 主要负责加载jre/lib/rt.jar相关的字节码文件的.
2. 扩展类加载器(ExtensionClassLoader), 主要负载加载 jre/lib/ext/*.jar 这些jar包的. 该类加载器在JDK1.9的时候更名为: Platform Class Loader, 其父类加载器为: null.
3. 应用程