天天看点

Java类静态代码块、构造块、构造器的执行顺序

代码:

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

有时又是:

还有可能是

甚至还有这种的:

31

大家没看错哈,3和1就是在一行的,同时与2之间就是有那么一个空白行。不知为啥,请大神求解。

上面的结果是在IDE中运行。而假如手动编译源文件,手动运行,结果又不一样了。看截图:

上面结果无论是对TestClass.java编译一次,多次运行还是多次编译多次运行,结果始终一样,都是上图你看到的结果。

有趣吧?哈哈

如有大神知晓,为什么IDE中结果不定,而手动运行结果一致的缘由,还望指教指教!

另外还有趣的是,上面的代码不是特意注释了构造器中的代码是 err,而不是 out 吗,现在把这个err改为out,那么无论是在IDE中执行还是手动编译执行,运行结果都是

什么原因啊?

无论怎样,个人认为手动运行的结果是正确的,其他不同的结果应该是受IDE环境的影响。所以可以得出结论静态代码块、构造块、构造器的执行顺序是:

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