一个父类定义了static静态代码块,且有一个静态变量value;子类实现(implements)父类,子类中也有静态代码块,那么直接调用子类.value输出内容是什么呢?
且看代码:
package com.example.classloading;
public class SuperClass {
static {
System.out.println("SuperClass init!!!");
}
public static int value = 123;
}
package com.example.classloading;
public class ChildClass extends SuperClass {
static {
System.out.println("ChildClass init !!!");
}
}
package com.example.classloading;
/**
* 对于静态字段,只有直接定义这个字段的类才会被初始化
* @author yanup
*
*/
public class Test {
public static void main(String[] args) {
System.out.println(ChildClass.value);
}
}
大家能猜到最终打印的是什么么?
SuperClass init!!!
123
惊不惊喜,意不意外,不错,只打印了父类中的静态代码块和value值;
总结如下:对于静态字段,只有直接定义这个字段的类才会被初始化!!!!切记切记切记,重要的事情说三遍!!!