package staticSuper;
class StaticSuper {
static {
System.out.println("super static block");
}
StaticSuper(){
System.out.println("super constructor");
}
}
public class StaticTests extends StaticSuper {
static {
System.out.println("static block");
}
StaticTests(){
System.out.println("main class");
}
public static void main(String args[]) {
System.out.println("in main");
}
}
结果:
super static block
static block
疑问:
父类的static块的内容先于子类的static块的内容执行,感觉上就像是实例化子类时先实例化父类。可问题是两个类的构造函数中要求的输出统统都没有,因此引发了我的疑惑——第一,主类,就这里的staticTests到底有没有被实例化?能否用一个引用变量指向它?第二,如果被实例化了,为何能够绕过构造器?如果没有被实例化,那为什么运行了static中的内容?为什么父类中的static先于子类中的static?
谢谢
侃侃尔雅
相关分类