java类的初识化
<clinit>:类的初始化 编译器自动调用的方法会将 静态成员变量的显示赋值语句
静态代码块中的 内容进行合并
哪些操作会触发类的初始化:
1.在当前类中调用main()
2.调用本类中的静态资源
3.创建该类对象会触发
4.调用子类中的静态资源 会导致父类初识化
注意:
1.子类使用从父类继续的静态资源时 不会导致子类初始化
2.父子类进行类的初始化 也只是调用一个 <clinit>方法将父子类中的 静态成员变量的显示赋值语句
静态代码块中的 内容进行合并
代码演示:
public class Person {
public static int num = getNum();
public static int getNum()
{
System.out.println("Person getNum()");
return 10;
}
static {
System.out.println("Person 静态代码块1");
}
public static int num1 = getNum();
static {
System.out.println("Person 静态代码块2");
}
Person(){
System.out.println("无参构造器..........");
}
}
class Son extends Person{
public static int num = getNum1();
static {
System.out.println("Son 静态代码块1");
}
public static int getNum1() {
System.out.println("Son getNum1()");
return 10;
}
static {
System.out.println("Son 静态代码块2");
}
}
调用:
public class Test {
public static void main(String[] args) {
Son.getNum();
System.out.println("-------------------");
Son.getNum1();
}
}
演示结果: