java中構(gòu)造方法的寫法為“class class_name {public class_name(){} public ciass_name([paramList]){} …// 類主體}”,方法名必須與類名相同,各自的方法參數(shù)要不同。
本教程操作環(huán)境:windows7系統(tǒng)、java8版、DELL G3電腦。
構(gòu)造方法是類的一種特殊方法,用來初始化類的一個新的對象,在創(chuàng)建對象(new 運算符)之后自動調(diào)用。Java 中的每個類都有一個默認的構(gòu)造方法,并且可以有一個以上的構(gòu)造方法。
Java 構(gòu)造方法有以下特點:
-
方法名必須與類名相同
-
可以有 0 個、1 個或多個參數(shù)
-
沒有任何返回值,包括 void
-
默認返回類型就是對象類型本身
-
只能與 new 運算符結(jié)合使用
值得注意的是,如果為構(gòu)造方法定義了返回值類型或使用 void 聲明構(gòu)造方法沒有返回值,編譯時不會出錯,但 Java 會把這個所謂的構(gòu)造方法當成普通方法來處理。
這時候大家可能會產(chǎn)生疑問,構(gòu)造方法不是沒有返回值嗎?為什么不能用 void 聲明呢?
簡單的說,這是 Java 的語法規(guī)定。實際上,類的構(gòu)造方法是有返回值的,當使用 new 關(guān)鍵字來調(diào)用構(gòu)造方法時,構(gòu)造方法返回該類的實例,可以把這個類的實例當成構(gòu)造器的返回值,因此構(gòu)造器的返回值類型總是當前類,無須定義返回值類型。但必須注意不要在構(gòu)造方法里使用 return 來返回當前類的對象,因為構(gòu)造方法的返回值是隱式的。
注意:構(gòu)造方法不能被 static、final、synchronized、abstract 和 native(類似于 abstract)修飾。構(gòu)造方法用于初始化一個新對象,所以用 static 修飾沒有意義。構(gòu)造方法不能被子類繼承,所以用 final 和 abstract 修飾沒有意義。多個線程不會同時創(chuàng)建內(nèi)存地址相同的同一個對象,所以用 synchronized 修飾沒有必要。如果不了解除 static、final 之外其他的關(guān)鍵字,教程后面會詳細講解。
構(gòu)造方法的語法格式如下:
class class_name { public class_name(){} // 默認無參構(gòu)造方法 public ciass_name([paramList]){} // 定義構(gòu)造方法 … // 類主體 }
在一個類中,與類名相同的方法就是構(gòu)造方法。每個類可以具有多個構(gòu)造方法,但要求它們各自包含不同的方法參數(shù)。
示例:
構(gòu)造方法主要有無參構(gòu)造方法和有參構(gòu)造方法兩種,示例如下:
public class MyClass { private int m; // 定義私有變量 MyClass() { // 定義無參的構(gòu)造方法 m = 0; } MyClass(int m) { // 定義有參的構(gòu)造方法 this.m = m; } }
該示例定義了兩個構(gòu)造方法,分別是無參構(gòu)造方法和有參構(gòu)造方法。在一個類中定義多個具有不同參數(shù)的同名方法,這就是方法的重載。這兩個構(gòu)造方法的名稱都與類名相同,均為 MyClass。在實例化該類時可以調(diào)用不同的構(gòu)造方法進行初始化。
注意:類的構(gòu)造方法不是要求必須定義的。如果在類中沒有定義任何一個構(gòu)造方法,則 Java 會自動為該類生成一個默認的構(gòu)造方法。默認的構(gòu)造方法不包含任何參數(shù),并且方法體為空。如果類中顯式地定義了一個或多個構(gòu)造方法,則 Java 不再提供默認構(gòu)造方法。
提示:無參數(shù)的構(gòu)造方法也被稱為 Nullary 構(gòu)造方法。只有編譯程序自動加入的構(gòu)造方法,才稱為默認構(gòu)造函數(shù)。如果自行編寫無參數(shù)、沒有內(nèi)容的構(gòu)造函數(shù),就不稱為默認構(gòu)造函數(shù)了(只是 Nullary 構(gòu)造函數(shù))。雖然只是名詞定義,不過認證考試時要區(qū)別一下兩者的不同。
相關(guān)視頻教程推薦:Java視頻教程