类立即初始化
- new关键字
- 调用和设置静态域中的内容
- 子类执行时父类没有初始化
- 通过反射进行进行反射调用
- 用户指定一个主类(main()方法所在类)
- jdk1.8之后允许接口有一个默认(default)方法
被动引用的例子 - 子类引用父类静态域的内容,不会导致子类完成初始化
class SuperClass {
static{
System.out.println("SuperClass Init!");
}
public static int value = 123;
}
class SubClass extends SuperClass{
static{
System.out.println("SubClass Init");
}
}
// 非主动使用类字段演示
public class TestMain{
public static void main(String [] args){
System.out.println(SubClass.value);
}
}
//SuperClass Init!
//123
被动引用的例子 - 常量在编译阶段即存储方法区的常量池中,本质上没有触及到定义常量的类即不会触发定义常量所在类的初始化
public class TestInitialization {
public static void main(String[] args) {
Test02.getInfo();
}
}
class Test01{
static{
System.out.println("Test01 - Initialized!");
}
public static final String info = "we are the world";
}
class Test02{
static{
System.out.println("Test02 - Initialized!");
}
public static void getInfo(){
System.out.println(Test01.info);
}
}
/*
Test02 - Initialized!
we are the world
*/
类立即初始化的场景