代码:
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环境的影响。所以可以得出结论静态代码块、构造块、构造器的执行顺序是:
静态代码块-->构造块-->构造器(构造函数)。
继续阅读与本文标签相同的文章
上一篇 :
ConcurrentHashMap原理分析
下一篇 :
编译过程的五个阶段
-
Java技术丛书
2026-06-02栏目: 教程
-
一个一百亿的计算器的实现
2026-06-02栏目: 教程
-
算法笔试题
2026-06-02栏目: 教程
-
数据结构复习
2026-06-02栏目: 教程
-
常见算法笔试或面试题
2026-06-02栏目: 教程
