【发布时间】:2016-05-11 02:28:48
【问题描述】:
我已经编写了以下代码并为超类创建了对象。
class SuperClass{
static int a=2;
static int b(){
return 2;
}
int c(){
return 2;
}
SuperClass(){
System.out.println("Super");
}
static {
System.out.println("super");
}
}
public class Sub extends SuperClass{
Sub(){
System.out.println("Sub");
}
static {
System.out.println("sub");
}
static int b(){
return 3;
}
int c(){
return 3;
}
public static void main(String ax[]){
SuperClass f =new SuperClass();
System.out.println(f.c());
System.out.print(SuperClass.b());
}
}
当我检查输出时,如下所示:
super
sub
Super
2
2
我知道只有在初始化类的对象或进行任何静态引用时才会执行静态块。但是在这里,我没有对 Sub 类做任何这些。那为什么我会看到“子”,即子类的静态块输出?
【问题讨论】:
-
执行
main方法(嵌套在Sub类中)是一个静态引用。 :) -
@KonstantinYovkov 我想过这一点,但即便如此,“sub”也应该首先出现。现在,从 Bathsheba 的回答中消除了这个疑问,因为静态块按超类和子类的顺序执行。谢谢。
-
@anil 不是第一个,
Sub类仍然依赖于Super类,因此先执行。
标签: java constructor static static-methods