Java中初始化塊分為兩種:
1.非靜態初始化塊
非靜態初始化塊.png
2.靜態初始化塊。
靜態初始化塊.png
注意:
靜態初始化塊只在類加載的時候執行,且只執行一次,同時靜態初始化塊只能給靜態成員變量賦值, 不能給普通的成員變量賦值。要想給普通成員變量賦值,可以使用非靜態代碼塊或者構造函數。這些初始化塊都是在構造函數之前執行的。
下面我們看一段代碼:
public class Utils {
private int age;
private String sex;
private static String name;
private static final String TAG = "MainActivity";
static {
Log.e(TAG,"初始化name");
name = "author";
}
public Utils() {
Log.e(TAG,"初始化age");
age = 24;
}
{
Log.e(TAG,"初始化sex");
sex = "男";
}
}
調用:
Utils utils = new Utils();
Log.e(TAG,"===================");
Utils utils1 = new Utils();
輸出結果為:
06-27 15:20:49.534 15103-15103/? E/MainActivity: 初始化name
06-27 15:20:49.534 15103-15103/? E/MainActivity: 初始化sex
06-27 15:20:49.534 15103-15103/? E/MainActivity: 初始化age
06-27 15:20:49.534 15103-15103/? E/MainActivity: ===================
06-27 15:20:49.534 15103-15103/? E/MainActivity: 初始化sex
06-27 15:20:49.534 15103-15103/? E/MainActivity: 初始化age
從輸出結果中,我們可以看到首先會去執行靜態初始化塊,而且只會執行一次,然后會去執行非靜態初始化塊,而且他們都在構造方法之前執行。如果有多個同類型的初始化塊,則會按照從上到下的順序一次執行,你們可以試試看。