1. 程式人生 > >Java常見程式碼塊的作用與區別

Java常見程式碼塊的作用與區別

注意:程式碼塊中宣告的變數的作用域只在這個程式碼塊中

1. 區域性程式碼塊

作用在方法當中,作用是控制變數的生命週期:

public void show(){
    {
        System.out.println("區域性程式碼塊執行!");
    }
}

在程式中當我們定義完成一個區域性變數x之後,並且在接下來的程式碼中,不想再用到它時,那麼就沒必要讓x在記憶體中繼續佔用空間。因此就有了區域性程式碼塊。

2. 構造程式碼塊

作用在類的定義Body中,作用是給類的部分欄位統一初始化:

public class Apple {
    private String size;

    //構造程式碼塊  
    {
        System.out.println("構造程式碼塊執行!");
        size = "E";
    }
}  

構造程式碼塊與建構函式的區別是:構造程式碼塊是給所有物件進行統一初始化,而建構函式是給對應的物件初始化,因為建構函式是可以多個的,執行哪個建構函式就會建立什麼樣的物件,但無論建立哪個物件,都會先執行相同的構造程式碼塊。也就是說,構造程式碼塊中定義的是不同物件共性的初始化內容。所以理所當然的,構造程式碼塊在建構函式之前執行。

3. 靜態程式碼塊

作用有兩個:  (1)給類的靜態變數賦值;  (2)宣告靜態變數;

作用在類的Body中,對類中的靜態變數初始化:

public class APP {
    static int x, y; // 靜態變數

    static {
        x = 5; // 給靜態變數x賦值
    }

    public static void myMethod() {
        y = x++ + ++x; // x++ 先使用x的值再加1;++x先加1再使用x的值
    }

    public static void main(String[] args) {
        x--;
        myMethod();
        System.out.println(x + y + ++x);
    }
}

輸出:23

注意,如果靜態程式碼塊中的程式碼改為:

static {
    int x = 5; // 宣告一個靜態變數
}

則只是在宣告靜態變數,而且這個靜態變數的作用域只在這個程式碼塊中,而不是進行初始化,最後的輸出結果是3。