Java欄位初始化規律

呓语-MSHK發表於2024-10-15

public class mm {

public static void main(String[] args){
    InitializeBlockClass obj=new InitializeBlockClass();
    System.out.println(obj.field);

    obj=new InitializeBlockClass(300);
    System.out.println(obj.field);
}

}

class InitializeBlockClass{
{
field=200;
}
public int field=100;
public InitializeBlockClass(int value){
this.field=value;
}
public InitializeBlockClass(){

}

}

結果:
"C:\Program Files\Microsoft\jdk-11.0.16.101-hotspot\bin\java.exe" "-javaagent:D:\IDEA2\IntelliJ IDEA Community Edition 2024.1.4\lib\idea_rt.jar=50829:D:\IDEA2\IntelliJ IDEA Community Edition 2024.1.4\bin" -Dfile.encoding=UTF-8 -classpath "D:\java code\untitled5\out\production\untitled5" mm
100
300

Process finished with exit code 0

先進行欄位的初始化,field 被賦值為 100。
然後執行例項初始化塊,field 被賦值為 200。
最後,建構函式執行結束。
欄位的直接賦值是在物件建立時的第一步,然後執行初始化塊,而後再執行建構函式。這種賦值順序是 Java 的特點。

相關文章