【Java】比较赋值、实例块与构造函数的初始化顺序

有参考:
Java类的初始化顺序(静态 代码块 构造函数等的执行顺序)_尽人事看天意的博客-CSDN博客

1.

public class chu_shi_hua {
		
        static String name = "zct";
        int age = 50;

        {
            System.out.println("age: "+age);
            System.out.println("我是普通代码块");
        }

        static{
            System.out.println("static name: "+name);
            System.out.println("我是静态代码块");
        }

        chu_shi_hua(){
            System.out.println("我是构造函数");
        }

        public static void main(String[] args) {
        	//chu_shi_hua father = new chu_shi_hua();
        }
        
}

输出结果:

static name: zct
我是静态代码块

2.

public class chu_shi_hua {
		
        static String name = "zct";
        int age = 50;

        {
            System.out.println("age: "+age);
            System.out.println("我是普通代码块");
        }

        static{
            System.out.println("static name: "+name);
            System.out.println("我是静态代码块");
        }

        chu_shi_hua(){
            System.out.println("我是构造函数");
        }

        public static void main(String[] args) {
        	chu_shi_hua father = new chu_shi_hua();
        }
        
}

输出结果:

static name: zct
我是静态代码块
age: 50
我是普通代码块
我是构造函数

可以看出

执行顺序 
    1. 静态成员变量
    2. 静态代码块
    3. 普通成员变量
    4. 普通代码块
    5. 构造函数

3.

public class StaticBlock {
    static int i = 5;
    int j=1;
    static {
        System.out.println("First Static code i= " + i++);
    }
    static {
        System.out.println("Second Static code i= "+ i++ );
    }
    public static void main(String args[]) {
        System.out.println("begin main method");
        StaticBlock s1 = new StaticBlock();
        StaticBlock s2 = new StaticBlock();
        System.out.println("At last, i= " + i);
    }
}

运行结果: 

可以看到在执行main函数之前,静态变量与静态代码块均初始化完毕。

posted @ 2021-11-06 16:18  轻闲一号机  阅读(7)  评论(0)    收藏  举报  来源