java里初始化一個類的對象,通過初始化快或者構造方法進行數據賦值。與其相關的執行代碼有這么幾種:
- 靜態初始化塊
- 初始化塊
- 構造方法
靜態初始化塊
靜態初始化塊只在類加載時執行一次,同時靜態初始化塊只能給靜態變量賦值,不能初始化普通的成員變量。
非靜態初始化塊
非靜態初始化塊在每次初始化實例對象的時候都執行一次,可以給任意變量賦值。
構造方法
在每次初始化實例對象時調用。
重點:執行順序->
- 在加載類時執行一次靜態初始化塊(之后不再調用)。
- 在每次初始化實例對象時:先執行非靜態初始化塊,再執行構造方法。
若是概念不好懂,請看如下實例:
package com.mgh;
public class Main { String name; // 聲明變量name String sex; // 聲明變量sex static int age;// 聲明靜態變量age // 構造方法 public Main() { System.out.println("通過構造方法初始化name"); name = "tom"; } // 初始化塊 { System.out.println("通過初始化塊初始化sex"); sex = "男"; } // 靜態初始化塊 static { System.out.println("通過靜態初始化塊初始化age"); age = 20; } public void show() { System.out.println("姓名:" + name + ",性別:" + sex + ",年齡:" + age); } public static void main(String[] args) { // 創建對象 Main obj1 = new Main(); Main obj2 = new Main(); // 調用對象的show方法 obj1.show(); obj2.show(); } } output: 通過靜態初始化塊初始化age 通過初始化塊初始化sex 通過構造方法初始化name 通過初始化塊初始化sex 通過構造方法初始化name 姓名:tom,性別:男,年齡:20 姓名:tom,性別:男,年齡:20