代码:

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环境的影响。所以可以得出结论静态代码块、构造块、构造器的执行顺序是:

静态代码块-->构造块-->构造器(构造函数)。


收藏 打印