加载是相对于进程而言的,
启动一个main方法,也就是启动了一个进程,在一个进程中,一个类只会被加载一次
package com.haier.test01;
public class First {
public static void main(String[] args) {
int i = 0;
while (i++ < 5) {
new Thread(() -> new P()).start();
}
}
}
class P {
public static int a = 1;
static {
System.out.println("static block");
}
public P() {
System.out.println("P.P()方法");
}
}
查看输出结果, 类P只有在第一次被调用的时候才进行初始化, 在之后的实例时都不在进行初始化
static block
P.P()方法
P.P()方法
P.P()方法
P.P()方法
P.P()方法
什么时候类加载:
- 调用Java命令。
- 创建对象时
- 访问静态成员时
- Class.forName("包名.类名")