1. 程式人生 > 實用技巧 >程式碼塊和靜態程式碼塊

程式碼塊和靜態程式碼塊

程式碼塊
  • 匿名程式碼塊{}
  • 靜態程式碼塊static{}

靜態程式碼塊在類載入時呼叫,且只調用一次。

匿名程式碼塊在例項化物件時呼叫,且在構造方法之前呼叫。

public class Person {
    // 匿名程式碼塊,建立物件時呼叫,在構造方法之前
    {
        System.out.println("Person");
    }

    // 靜態程式碼塊,類載入時呼叫,只調用一次
    static {
        System.out.println("Person static");
    }

    // 無參構造
    public Person() {
        System.out.println("Person.Person");
    }
}

// 測試程式碼
new Person();
System.out.println();
new Person();

執行結果

Person static
Person
Person.Person

Person
Person.Person
繼承關係中的程式碼塊
// 父類
public class Person {
    // 匿名程式碼塊
    {
        System.out.println("Person");
    }

    // 靜態程式碼塊
    static {
        System.out.println("Person static");
    }

    public Person() {
        System.out.println("Person.Person");
    }
}

// 子類
public class Man extends Person {
    // 匿名程式碼塊
    {
        System.out.println("Man");
    }

    // 靜態程式碼塊
    static {
        System.out.println("Man static");
    }

    // 無參構造
    public Man() {
        System.out.println("Man.Man");
    }
}

// 測試程式碼
new Man();
System.out.println();
new Man();

執行結果

Person static
Man static
Person
Person.Person
Man
Man.Man

Person
Person.Person
Man
Man.Man

可以看出,靜態程式碼塊只執行一次,在類載入時執行。先執行父類的靜態程式碼塊,後執行子類的靜態程式碼塊。

例項化物件時先執行父類的程式碼塊及構造方法,再執行子類的程式碼塊及構造方法。