Java基礎知識整理之程式碼塊

Wayfreem發表於2019-01-19

程式碼塊

我們主要觀察普通程式碼塊、構造塊、靜態塊的主要作用。

在程式編寫之中可以直接使用”{}” 定義一段語句,那麼根據此部分定義的位置以及關鍵字的不同可以分為以下幾種:

  • 普通程式碼塊
  • 構造塊
  • 靜態塊

不過,我們在寫程式的時候,儘量不去使用程式碼塊。

普通程式碼塊

如果說一個程式碼塊寫在了方法裡,那麼就稱它了普通程式碼塊。

程式碼例項

下面說的變數,只是相對關係。

public class TestDemo {

    public static void main(String[] args) {
        {// 普通程式碼塊
            int num = 10;    //區域性變數
            System.out.println(num);
        }
        
        int num = 100;    // 相對的上面的區域性變數,為全域性變數
        System.out.println(num);
    }
}

實際上普通程式碼塊就是為了防止在方法裡面編寫的程式碼過多時,有可能產生的變數重名。對一個方法的程式碼進行區域性分割。

構造塊

如果說現在將一個程式碼塊寫在了一個類裡面,那麼我們就稱為構造塊。

程式碼例項

class Book{
    public Book() {    // 構造方法
        System.out.println("【A】 Book 類的構造方法");
    }
    
    {// 將程式碼塊寫在了類裡面
        System.out.println("【B】 Book 類的構造塊");
    }
}

public class TestDemo {

    public static void main(String[] args) {
        new Book();
    }
}

控制檯輸出

【B】 Book 類的構造塊
【A】 Book 類的構造方法

此時例項化 Book 類物件時,雖然執行的是 Book 類的構造方法,但是構造塊裡面的程式碼也執行了。並且會發現構造塊的程式碼是優先於 構造方法執行。

程式碼例項

class Book{
    public Book() {    // 構造方法
        System.out.println("【A】 Book 類的構造方法");
    }
    
    {// 將程式碼塊寫在了類裡面
        System.out.println("【B】 Book 類的構造塊");
    }
}

public class TestDemo {

    public static void main(String[] args) {
        new Book();
        new Book();
        new Book();
    }
}

控制檯輸出

【B】 Book 類的構造塊
【A】 Book 類的構造方法
【B】 Book 類的構造塊
【A】 Book 類的構造方法
【B】 Book 類的構造塊
【A】 Book 類的構造方法

從控制檯的輸出可以看到,每當我們例項化一個 Book 類時,我們的構造塊都會被執行一次。

靜態塊

如果我們的程式碼塊使用了 static 進行定義的話,那麼就被稱為靜態塊。我們分為兩種情況來看。

在非主類中使用

程式碼例項

class Book{
    public Book() {    // 構造方法
        System.out.println("【A】 Book 類的構造方法");
    }
    
    {// 將程式碼塊寫在了類裡面
        System.out.println("【B】 Book 類的構造塊");
    }
    
    static {// 將程式碼塊寫在了類裡面
        System.out.println("【C】 Book 類的構造塊");
    }
}

public class TestDemo {

    public static void main(String[] args) {
        new Book();
        new Book();
        new Book();
    }
}

控制檯輸出

【C】 Book 類的構造塊
【B】 Book 類的構造塊
【A】 Book 類的構造方法
【B】 Book 類的構造塊
【A】 Book 類的構造方法
【B】 Book 類的構造塊
【A】 Book 類的構造方法

從上面我們可以看到,靜態塊只是執行了一次,並且是優先於構造方法和構造塊。也就是說,不管例項化多少個物件,靜態塊只執行一次。

在主類中使用

程式碼例項

public class TestDemo {
    
    static {
        System.out.println("**********");
    }

    public static void main(String[] args) {
        System.out.println("main()");
    }
}

控制檯輸出

**********
main()

從控制檯的輸出,我們就可以知道,static 靜態塊 是優先於 main 方法執行的

相關文章