运行下面这段代码,会输出什么?
public class StaticTest {
public static void main ( String [] args ) {
staticFunction ();
}
static StaticTest st = new StaticTest ();
static {
System.out.println ("1");
}
{
System.out.println("2");
}
StaticTest(){
System.out.println("3");
System.out.println("a="+a+",b="+b);
}
public static void staticFunction(){
System.out.println("4");
}
int a=110;
static int b = 112;
}
涉及的知识点:Java中赋值顺序:
父类的静态变量赋值
自身的静态变量赋值
父类成员变量赋值和父类块赋值
父类构造函数赋值
自身成员变量赋值和自身块赋值
自身构造函数赋值
其实这里还牵涉到一个冷知识,就是在嵌套初始化时有一个特别的逻辑。特别是内嵌的这个变量恰好是个静态成员,而且是本类的实例。这会导致一个有趣的现象:“实例初始化竟然出现在静态初始化之前”。
最后公布一下答案:
2
3
a = 110 , b = 0
1
4