一个Java源文件,会被JVM编码成.class文件(字节码文件),每个java程序都需要运行在自己的JVM上,再告知JVM程序的运行入口,再被JVM通过类加载器加载到内存中。当程序要使用某个类的时候,如果这个类没有被加载到内存中,则系统会通过类的加载,类的连接,类的初始化将这三个步骤来对类进行初始化。
类的加载:
Class类是运行时类型信息的对应类,对于手动编写的类,在JVM编译时会为这个类创建一个Class对象来保存这个类相关的类型信息,并将之保存在与这个类同名的.class文件中(编译后的字节码文件中保存的就是这个类对应的Class对象),当我们需要这个类的对象时,JVM会查看这个类是否已经加载到内存中,如果没有加载,则会把.class文件加载内存中。例如我们编写好一个Student类,当我们第一次new这个学生类对象时,类加载器子系统就会把这个类的.class文件加载到内存中(将之放在运行时的数据区的方法区内,接着在堆区创建一个Class对象,Class对象封装了类在方法区的数据结构),根据对应的Class对象来创建这个学生类,无论创建了多少个实例对象,在JVM中都只有一个这个类的Class对象。
那么,什么是类加载器呢?
1、 Bootstrap class loader:它是虚拟机的内置类加载器,通常表示为null ,并且没有父null
2、 Platform class loader:平台类加载器可