小编jas*_*odd的帖子

Java静态初始化顺序

我试图找出初始化发生的顺序,或者说是为什么初始化按此顺序发生的原因.鉴于代码:

public class Main {

    {
        System.out.printf("NON-STATIC BLOCK\n");
    }

    static{
        System.out.printf("STATIC BLOCK\n");
    }

    public static Main m = new Main();

    public Main(){
        System.out.printf("MAIN CONSTRUCTOR\n");
    }

    public static void main(String... args) {
        //Main m = new Main();
        System.out.printf("MAIN METHOD\n");

    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

STATIC BLOCK

NON-STATIC BLOCK

MAIN CONSTRUCTOR

MAIN METHOD
Run Code Online (Sandbox Code Playgroud)

但是,m在初始化块之前移动声明会产生:

NON-STATIC BLOCK

MAIN CONSTRUCTOR

STATIC BLOCK

MAIN METHOD
Run Code Online (Sandbox Code Playgroud)

我完全不知道为什么它会按此顺序发生.此外,如果我static在声明中删除了关键字m,则init块和构造函数都不会触发.任何人都可以帮我解决这个问题吗?

java

23
推荐指数
1
解决办法
9202
查看次数

标签 统计

java ×1