更新時(shí)間:2021年12月14日11時(shí)04分 來(lái)源:傳智教育 瀏覽次數(shù):
Java構(gòu)造器指的是Java構(gòu)造方法(也叫“Java構(gòu)造函數(shù)”)。Java構(gòu)造方法是類的一種特殊方法,主要用來(lái)在創(chuàng)建和初始化一個(gè)類的新對(duì)象,簡(jiǎn)化了對(duì)象初始化的代碼,總與new運(yùn)算符一起使用在創(chuàng)建對(duì)象的語(yǔ)句中。需要注意的是一個(gè)類可以有多個(gè)構(gòu)造函數(shù),可根據(jù)其參數(shù)個(gè)數(shù)的不同或參數(shù)類型的不同來(lái)區(qū)分它們,即構(gòu)造函數(shù)的重載。
·構(gòu)造器必須與主類同名
·可以有0 個(gè)、1個(gè)或多個(gè)參數(shù)
·沒(méi)有任何返回值,包括void
·構(gòu)造器可以重載
·默認(rèn)返回類型就是對(duì)象類型本身
·只能與new運(yùn)算符結(jié)合使用
1.初始化成員屬性,而不是初始化對(duì)象,初始化對(duì)象是通過(guò)new關(guān)鍵字實(shí)現(xiàn)的
2.通過(guò)new調(diào)用構(gòu)造方法初始化對(duì)象,編譯時(shí)根據(jù)參數(shù)簽名來(lái)檢查構(gòu)造函數(shù),稱為靜態(tài)聯(lián)編和編譯多態(tài)(參數(shù)簽名:參數(shù)的類型,參數(shù)個(gè)數(shù)和參數(shù)順序)
3.創(chuàng)建子類對(duì)象會(huì)調(diào)用父類構(gòu)造方法但不會(huì)創(chuàng)建父類對(duì)象,只是調(diào)用父類構(gòu)造方法初始化父類成員屬性
class class_name { public class_name(){} // 默認(rèn)無(wú)參構(gòu)造方法 public ciass_name([paramList]){} // 定義構(gòu)造方法 … // 類主體 }
Java構(gòu)造方法主要分為無(wú)參構(gòu)造方法和有參構(gòu)造方法兩種,例如下面的案例:
public class MyClass { private int m; // 定義私有變量 MyClass() { // 定義無(wú)參的構(gòu)造方法 m = 0; } MyClass(int m) { // 定義有參的構(gòu)造方法 this.m = m; } }
該示例定義了兩個(gè)構(gòu)造方法,分別是無(wú)參構(gòu)造方法和有參構(gòu)造方法。在一個(gè)類中定義多個(gè)具有不同參數(shù)的同名方法,這就是方法的重載。這兩個(gè)構(gòu)造方法的名稱都與類名相同,均為MyClass。在實(shí)例化該類時(shí)可以調(diào)用不同的構(gòu)造方法進(jìn)行初始化。
注意:類的構(gòu)造方法不是要求必須定義的。如果在類中沒(méi)有定義任何一個(gè)構(gòu)造方法,則 Java 會(huì)自動(dòng)為該類生成一個(gè)默認(rèn)的構(gòu)造方法。默認(rèn)的構(gòu)造方法不包含任何參數(shù),并且方法體為空。如果類中顯式地定義了一個(gè)或多個(gè)構(gòu)造方法,則 Java 不再提供默認(rèn)構(gòu)造方法。
下面我們通過(guò)實(shí)例來(lái)演示Java構(gòu)造器的使用
1) 首先在員工類 Worker 中定義兩個(gè)構(gòu)造方法,代碼如下:
public class Worker { public String name; // 姓名 private int age; // 年齡 // 定義帶有一個(gè)參數(shù)的構(gòu)造方法 public Worker(String name) { this.name = name; } // 定義帶有兩個(gè)參數(shù)的構(gòu)造方法 public Worker(String name,int age) { this.name = name; this.age = age; } public String toString() { return "大家好!我是新來(lái)的員工,我叫"+name+",今年"+age+"歲。"; } }
在 Worker 類中定義了兩個(gè)屬性,其中 name 屬性不可改變。分別定義了帶有一個(gè)參數(shù)和帶有兩個(gè)參數(shù)的構(gòu)造方法,并對(duì)其屬性進(jìn)行初始化。最后定義了該類的 toString() 方法,返回一條新進(jìn)員工的介紹語(yǔ)句。
提示:Object 類具有一個(gè) toString() 方法,該方法是個(gè)特殊的方法,創(chuàng)建的每個(gè)類都會(huì)繼承該方法,它返回一個(gè) String 類型的字符串。如果一個(gè)類中定義了該方法,則在調(diào)用該類對(duì)象時(shí),將會(huì)自動(dòng)調(diào)用該類對(duì)象的 toString() 方法返回一個(gè)字符串,然后使用“System.out.println(對(duì)象名)”就可以將返回的字符串內(nèi)容打印出來(lái)。
2)在 TestWorker 類中創(chuàng)建 main() 方法作為程序的入口處,在 main() 方法中調(diào)用不同的構(gòu)造方法實(shí)例化 Worker 對(duì)象,并對(duì)該對(duì)象中的屬性進(jìn)行初始化,代碼如下:
public class TestWorker { public static void main(String[] args) { System.out.println("-----------帶有一個(gè)參數(shù)的構(gòu)造方法-----------"); // 調(diào)用帶有一個(gè)參數(shù)的構(gòu)造方法 Worker worker1 = new Worker("張強(qiáng)"); System.out.println(worker1); System.out.println("-----------帶有兩個(gè)參數(shù)的構(gòu)造方法------------"); // 調(diào)用帶有兩個(gè)參數(shù)的構(gòu)造方法 Worker worker2 = new Worker("李麗",25); System.out.println(worker2); } }
在上述代碼中,創(chuàng)建了兩個(gè)不同的 Worker 對(duì)象:一個(gè)是姓名為張強(qiáng)的員工對(duì)象,一個(gè)是姓名為李麗、年齡為 25 的員工對(duì)象。對(duì)于第一個(gè) Worker 對(duì)象 Worker1,并未指定 age 屬性值,因此程序會(huì)將其值采用默認(rèn)值 0。對(duì)于第二個(gè) Worker 對(duì)象 Worker2,分別對(duì)其指定了 name 屬性值和 age 屬性值,因此程序會(huì)將傳遞的參數(shù)值重新賦值給 Worker 類中的屬性值。
猜你喜歡:
北京校區(qū)