class Welcome{
public static void main(String args[]){
System.out.println(Hello.a);
}
}
class Hello{
static int a=10;
static Hello h=new Hello();
{
System.out.println("IB");
}
static{
System.out.println("SB");
}
}
输出:
IB
SB
10
我真的不明白这次执行背后的逻辑。据我所知,静态变量被初始化并且静态块被执行。然后,初始化实例变量并执行实例块。
然而,这似乎有点令人困惑。如果给出实际执行的逐步顺序,那将是一个很大的帮助。
static Hello h=new Hello();
是什么意思?
这将如何对待?
答案 0 :(得分:3)
我修复了class
关键字并将其运行完毕。当你看到它正在运行时,执行非常简单。
a
和h
已设置。运行初始化程序块。所以" IB"打印出来。它们之所以运行是因为h
的值是一个新的Hello
对象。
注意:这只是因为h
在类中的static
初始化程序块之前定义。如果您更改它们在代码中出现的顺序,那么执行顺序将会改变。
运行静态初始化程序块。所以" SB"打印出来。
Hello.a
。因此打印10
。IDEOne链接:http://ideone.com/KfdS6n