Bootstrap

Java类的初始化顺序

public class Test {
    private String str = "初始化赋值";

    {
        System.out.println("代码块执行");
        str = "代码块赋值";
    }

    static {
        System.out.println("静态代码块执行...");
    }

    public Test(String str) {
        this.str = str;
        System.out.println("构造方法赋值执行...");
    }

    public void setStr(String str) {
        this.str = str;
        System.out.println("setter方法执行...");
    }

    public static void main(String[] args) {
        Test hello = new Test("hello");
        hello.setStr("world");

    }
}
Connected to the target VM, address: '127.0.0.1:5307', transport: 'socket'
静态代码块执行...
代码块执行
构造方法赋值执行...
setter方法执行...
Disconnected from the target VM, address: '127.0.0.1:5307', transport: 'socket'

其实setter方法没必要加,是我手动调用的,所以顺序依次为

静态代码块执行...
{在这一步其实str已经初始化赋值了 , 也就是说 str 当前等于 "初始化赋值"}
代码块执行
构造方法赋值执行...

静态代码块仅在类加载的时候执行一次!重复创建对象不会重复执行!

;