1、类的加载
当一个类第一次被使用时,会被加载到方法区,一个类只会被加载一次。
2、类的加载时机
-
创建类的实例。
-
调用类的静态变量,或者为静态变量赋值。
-
调用类的静态方法。
-
使用反射方式来强制创建某个类或接口对应的java.lang.Class对象。
-
初始化某个类的子类。
-
直接使用java.exe命令来运行某个主类。
public class Test01 { public static void main(String[] args) throws ClassNotFoundException { //1. 创建类的对象。 Student s = new Student(); //2. 调用类的静态变量,或者为静态变量赋值。 Student.s = "abc"; //3. 调用类的静态方法。 Student.method(); //4. 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象。 Class c = Class.forName("com.itheima_01.Student"); //5. 初始化某个类的子类。 SmallStu ss = new SmallStu(); //6. 直接使用java.exe命令来运行某个主类。 有主方法的类会直接被加载 } }
3、类加载器
类加载器就是把类加载到内存的工具。不同的类加载器用来加载不同类型的类。
-
启动类加载器(Bootstrap ClassLoader)
-
扩展类加载器(Extension ClassLoader) 在JDK9以后它变成了平台类加载器PlatformClassLoader
-
应用程序类加载器(Application ClassLoader)
-
关系:
-
Application 的父亲是 Extension 的父亲是 Bootstrap
-
Extension 的父亲是 Bootstrap
-