1 構造函數
構造函數是Java中的一個重要概念,它的作用是對對象的數據進行初始化。怎麼去理解呢?以新生入學爲例,我們當然可以在學生入學後去給他分配班級和學號,如果想讓一個新生一旦入學就擁有班級和學號呢?請看下面示例代碼:
public class Student {
private long id;
private String grade;
// 無參構造方法
public Student() {
}
// 有參構造方法
public Student(long id, String grade) {
this.id = id;
this.grade = grade;
}
// 測試
public static void main(String[] args) {
Student student = new Student(26776, "三(2)班");
Student student2 = new Student();
System.out.println("第一個學生信息,班級:" + student.grade + ",學號:" + student.id);
System.out.println("第二個學生信息,班級:" + student2.grade + ",學號:" + student2.id);
}
}
輸出結果:
第一個學生信息,班級:三(2)班,學號:26776
第二個學生信息,班級:null,學號:0
如上面代碼所示,構造函數有如下格式:
- 方法名和類名相同
- 沒有返回值類型,連void都不能有
- 沒有返回值,當然構造函數中可以有return語句。其實,在任何的void類型的方法的最後你都可以寫上 return,但並沒有實質意義
構造方法的注意事項:
- 如果我們沒寫構造方法,系統將提供一個默認的無參構造方法
- 如果我們給出了構造方法,系統將不再提供默認構造方法,如果這個時候,我們還想使用無參構造方法,就必須自己給出
- 在一個類中可以定義多個構造函數,以進行不同的初始化。多個構造函數存在於類中,是以重載的形式體現的。因爲構造函數的名稱都相同
構造函數與普通函數的區別:
- 一般函數是用於定義對象應該具備的功能。而構造函數定義的是,對象在調用功能之前,在建立時,應該具備的一些內容。也就是對象的初始化內容。
- 構造函數是在對象建立時由 jvm 調用, 給對象初始化。一般函數是對象建立後,當對象調用該功能時纔會執行。
- 普通函數可以使用對象多次調用,構造函數就在創建對象時調用。
- 構造函數的函數名要與類名一樣,而普通的函數只要符合標識符的命名規則即可。
- 構造函數沒有返回值類型。
2 構造代碼塊
構造代碼塊存在的意義在於提取多個構造方法中相同的代碼。每個構造方法執行前,會首先執行構造代碼塊。
public class Student {
private long id;
private String grade;
public Student() {
}
public Student(long id, String grade) {
this.id = id;
this.grade = grade;
}
// 構造代碼塊
{
System.out.println("學生要學習");
}
public static void main(String[] args) {
Student student = new Student(26776, "三(2)班");
Student student2 = new Student();
System.out.println("第一個學生信息,班級:" + student.grade + ",學號:" + student.id);
System.out.println("第二個學生信息,班級:" + student2.grade + ",學號:" + student2.id);
}
}
輸出結果:
學生要學習
學生要學習
第一個學生信息,班級:三(2)班,學號:26776
第二個學生信息,班級:null,學號:0
構造代碼塊屬於代碼塊一種,代碼塊還包括局部代碼塊和靜態代碼塊:
- 局部代碼塊:用於限定變量的生命週期,及早釋放,提高內存利用率。
- 構造代碼塊:把多個構造方法中相同的代碼可以放到這裏,每個構造方法執行前,首先執行構造代碼塊。
- 靜態代碼塊:對類的數據進行初始化,僅僅只執行一次。
靜態代碼塊、構造代碼塊、構造方法的順序:靜態代碼塊 > 構造代碼塊 > 構造方法