被动引用不会触发类初始化的实例:
public class SuperClass {
public static int value = 123;
static {
System.out.println("SuperClass Initial");
}
}
public class SubClass {
static {
System.out.println("SubClass Initial");
}
}
public class NotInitialization {
public static void main(String[] args) {
System.out.println(SuperClass.vale);
}
}
对于静态字段, 只有直接定义这个字段的类才会被初始化, 因此通过子类来引用父类中定义的静态字段, 只会触发父类的初始化而不会触发子类的初始化.
public class NotInitialization {
public static void main(String[] args) {
SuperClass[] sca = new SuperClass[10];
}
}
public class ConstClass {
public static final String HELLOWORLD = "hello world";
static {
System.out.println("ConstClass Initial");
}
}
public class NotInitialization {
public static void main(String[] args) {
System.out.println(ConstClass.HELLOWORLD);
}
}
public class NotInitialization {
public static void main(String[] args) {
System.out.println("hello world");
}
}
public class NotInitialization {
public static void main(String[] args) {
Class<?> clazz = SuperClass.class;
}
}