java中静态成员变量、静态代码块static执行时机

1、java中静态成员变量与静态块会比构造函数先执行,并且只会执行一次

2、一个类中有多个static修饰的成员变量或者代码块,会按照代码中先后的顺序执行

请看下面的示例:

public class Test {

    public static void main(String[] args) {
        Out out1 = new Out();
    }
}
public class Out {

    static int num = 0;
    String name = "aaa";
    static String name2 = "bbb";
    static Out out2 = new Out();

    Out() {
        System.out.println("执行构造函数");
    }
    {
        System.out.println("执行普通代码块,name值:"+name);
    }
    static {
        num +=1;
        System.out.println("执行静态代码块,name2值:"+name2+",num值:"+num);
    }
}

执行程序,输出如下:

 程序执行顺序为:

1)main方法构造out1时先加载Out类中带static的语句,按代码中先后顺序加载

2)加载到第3个static语句时开始构造out2,再次加载Out类,由于out2是static对象,所以不在执行out2中static语句

3)构造out2时执行普通代码块和构造函数(普通代码块优先于构造函数)

4)继续执行构造out1的语句,执行最后一个static语句(前3个已经执行了)

5)构造out1时,static执行完再执行普通代码块和构造函数

posted @ 2022-08-21 11:59  雷雨客  阅读(991)  评论(0编辑  收藏  举报