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