我写了下面的代码并为超类创建了对象。为什么子类的静态代码得到执行?
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类。那么为什么我会看到“sub”即子类的静态块输出?
执行'main'方法(嵌套在'Sub'类中)是一个静态引用。 :) –
@KonstantinYovkov我想过,但即使如此,“子”应该是第一个正确的。现在,这个疑问从Bathsheba的答案中清除了,因为静态块按照超类和子类的顺序执行。谢谢。 – AV94
@anil首先,'Sub'类仍然依赖于'Super'类,因此它首先被执行。 – njzk2