代码:
public class TestClass {
static {
System.out.println("1");
}
{
System.out.println("2");
}
public TestClass() {
System.err.println("3"); //注意这里是err,不是out
}
public static void main(String[] args) {
new TestClass();
}
}
问:输出结果是什么?
很有趣的是,不同的情况有不同的结果。
使用MyEclipse、Intellij Idea等IDE工具运行时,结果不定。有时是:
1
2
3
有时又是:
1
3
2
还有可能是
3
1
2
甚至还有这种的:
31
2
大家没看错哈,3和1就是在一行的,同时与2之间就是有那么一个空白行。不知为啥,请大神求解。
上面的结果是在IDE中运行。而假如手动编译源文件,手动运行,结果又不一样了。看截图:
上面结果无论是对TestClass.java编译一次,多次运行还是多次编译多次运行,结果始终一样,都是上图你看到的结果。
有趣吧?哈哈
如有大神知晓,为什么IDE中结果不定,而手动运行结果一致的缘由,还望指教指教!
另外还有趣的是,上面的代码不是特意注释了构造器中的代码是 err,而不是 out 吗,现在把这个err改为out,那么无论是在IDE中执行还是手动编译执行,运行结果都是
1
2
3
什么原因啊?
无论怎样,个人认为手动运行的结果是正确的,其他不同的结果应该是受IDE环境的影响。所以可以得出结论静态代码块、构造块、构造器的执行顺序是:
静态代码块-->构造块-->构造器(构造函数)。