在Java程序中,我們經常需要創建類的實例。在創建實例之前,我們需要了解一個重要的概念:類初始化。
類初始化是在程序第一次使用類時自動完成的。初始化的順序非常重要,因為它會影響類中靜態變量和靜態代碼塊的執行順序。
public class MyClass { static int num = 1; static { System.out.println("靜態代碼塊1執行"); num++; } static { System.out.println("靜態代碼塊2執行"); num--; } public MyClass() { System.out.println("構造函數執行"); } }
在上面的示例中,我們定義了一個MyClass類,它有兩個靜態代碼塊和一個靜態變量num。靜態代碼塊用于初始化類中的靜態變量。
當我們創建MyClass的實例時,Java虛擬機將會自動完成類初始化。類初始化的順序如下:
- 執行靜態代碼塊1,輸出"靜態代碼塊1執行"。
- 執行靜態代碼塊2,輸出"靜態代碼塊2執行"。
- 靜態變量num的初始值為1,然后執行num++,將num的值更改為2。
- 最后,創建MyClass的實例并調用構造函數,輸出"構造函數執行"。
因此,執行完上面的代碼后,輸出結果將會是:
靜態代碼塊1執行 靜態代碼塊2執行 構造函數執行
需要注意的是,如果類已經被初始化過,再次創建實例時不會再次執行靜態代碼塊。因此,一個類只會被初始化一次。