public class sup {
static {
System.out.print("In Sup ");
}
}
public class sub extends sup {
static {
System.out.print("In Sub");
}
}
final public class test extends sub {
static int a = 10;
static {
System.out.print(" In test" + a);
}
{
System.out.print(" In test" + a);
}
public static void main(String[] args) {
}
}
输出:
In Sup In Sub In test10
但是这里我没有创建对象。JVM应该调用main方法,该方法是静态的,并且仅初始化main类。所以应该给输出In test10
。
谁能解释为什么我得到不同的输出?
static
当类加载器加载类时,将调用初始化程序块。简而言之,执行顺序如下:
test
,取决于sub
sub
,取决于sup
sup
sup
已加载,并static
打印其块"In Sup"
sub
恢复加载,并static
打印其块"In Sub"
test
恢复加载,并将a
其初始化为10
。test
的static
块被执行并打印" In test10"
test
的main
函数已执行,但没有执行任何操作,因为它为空。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句