Java 中的構造函數鏈接及其示例和實現

已發表: 2023-06-05

在 Java 中,構造函數可以理解為用於初始化新創建的對象的代碼塊。 構造函數類似於 Java 中的實例方法。 然而,Java 中的構造函數和方法之間存在一個關鍵區別——方法具有返回類型,而構造函數沒有任何特定的返回類型。 程序員經常將構造函數稱為 Java 中的一種特殊類型的方法。

Java 中的構造函數與類同名,它們如下所示:

公開課 myProgram{

//這是構造函數

我的程序(){

}

..

}

當從另一個構造函數中調用構造函數時,即在 Java 中發生構造函數鏈接時。 然而,在我們深入研究構造函數鏈接之前,讓我們首先快速了解一下構造函數在 Java 中的工作方式,以及一些示例來鞏固您的理解。

目錄

Java 中的構造函數如何工作?

要了解構造函數的工作原理,讓我們看一個例子。 假設我們有一個名為 myProgram 的類。 現在,當我們創建這個類的對象時,我們將不得不編寫以下語句:

myProgram obj = new myProgram()

如您所見,上面示例中使用的 new 關鍵字創建了 myProgram 的對象,並調用構造函數來初始化這個新創建的對象。

如果這聽起來讓您有些困惑,請不要擔心。 讓我們看一個簡單的 Java 構造函數程序,以更好地理解 Java 中構造函數的工作原理。

Java 中的基本構造函數程序

查看以下使用構造函數的 Java 代碼:

公共課測試{

弦書;

//構造函數

測試(){

this.book = “麥田裡的守望者”;

}

public static void main(String[] args) {

測試對象 = 新測試();

System.out.println(obj.book);

}

}

輸出:

麥田裡的守望者

在上面的程序中,我們創建了一個名為“obj”的對象。 然後,我們打印了這個新創建的對象的實例變量名。 從輸出中可以看出,輸出與構造函數初始化期間傳遞給“book”的值相同。

這表明在創建 obj 對象的那一刻,構造函數被自動調用。 在這裡,我們使用“this”關鍵字來引用當前對象。 還有更多方法可以做到這一點,我們將在本文後面討論構造函數鏈接時討論。

了解了 Java 中構造函數的基礎知識後,讓我們繼續學習 Java 中的構造函數鍊及其工作原理!

單個類中的構造函數鏈接

但是, Java 中涉及單個類的構造函數鍊是什麼? 從同一類中的另一個構造函數調用一個構造函數包括該類中的構造函數鏈接。 “this”關鍵字用於同一類中構造函數鏈接的語法中。 使用“this”時引用當前類實例。 最好通過示例了解 Java 中構造函數鏈接的用法

從基類/父類鏈接構造函數

Java 中的一個類可以派生自另一個類; 派生類稱為子類,派生類稱為超類。 子類可以有自己的構造函數並調用其超類的構造函數。

超類構造函數使用術語 super(),後跟所需的輸入。 super() 關鍵字必須始終出現在子類構造函數的第一行中。

來自不同構造函數的調用,一個生成器

使用 this() 關鍵字,Java 中的構造函數可以調用同一類中的另一個構造函數。 構造函數中的第一個關鍵字必須始終是 this() 關鍵字,它只能用於調用同一類型的另一個構造函數。

電話超類構造函數

Java 中的 super() 關鍵字允許子類構造函數調用超類的構造函數。 super() 關鍵字,只能用於調用子類超類的構造函數,必須始終位於子類構造函數的第一行。

如果構造函數以不同的順序排列,Java 程序的行為可能會有所不同。 如果一個類有許多構造函數,並且其中一個使用 this() 關鍵字調用另一個構造函數,則更改構造函數的順序可以改變程序的行為方式。

使用 Init 塊鏈接構造函數的不同方法

使用初始化塊是Java 中構造函數鏈接的另一種方法 一段稱為初始化塊的代碼運行於

Java 中構造函數鏈的要點

當我們從同一類的另一個構造函數調用構造函數時,發生的事情稱為構造函數鏈接。 進行構造函數鏈接的主要目的是通過一堆不同的構造函數傳遞參數,並且只在一個地方初始化它們。 這樣,您就有機會在一個位置維護所有初始化,同時可以向用戶提供不同的構造函數。

如果您不執行構造函數鏈接並且兩個不同的構造函數需要一個參數,則您將需要對該參數進行兩次初始化。 另外,每次初始化更改時,您都需要對所有構造函數進行相應的更改,而不僅僅是一個。

根據經驗,您應該始終從參數較少的構造函數中調用參數較多的構造函數。 您還必須知道我們可以在類中重載多個構造函數。 但是,在創建對象時,只會調用一個特定的構造函數。 在使用 Java 編程時,可能會出現很多情況,您需要在不創建不同對象的情況下相互調用多個構造函數。 這種從另一個構造函數調用一個構造函數以及當涉及的構造函數調用另一個構造函數時的機制稱為構造函數鏈接。

從世界一流大學在線學習軟件課程獲得執行 PG 課程、高級證書課程或碩士課程,以快速推進您的職業生涯。

關於構造函數鏈接,您應該牢記兩件主要的事情,以確保最清晰:

  • 構造函數鏈接的主要目的是維護代碼。 這個想法是幫助您只編寫一段可以在您的程序中重複使用的代碼。 這樣,您的代碼不僅會乾淨易讀,而且由於所有更正和更改僅發生在一個位置而不是所有構造函數,因此管理起來也會容易得多。
  • 已調用的構造函數不會創建單獨的對象。 相反,它使用當前運行的對象來調用另一個構造函數。 這就像在構造函數中調用不同的方法,只是它也是一個構造函數。

正如您在前面的示例中看到的,我們使用 this 關鍵字來訪問構造函數的參數。 同樣,構造函數鏈接也主要需要兩個關鍵字。 這是這兩個關鍵字:

  • this – 它的方法表示調用當前類構造函數。
  • super – 它的方法表示調用直接超類或父超類構造函數。

此外,您應該了解 Java 中構造函數鏈方面的一些其他重要術語和定義:

  • 構造函數調用:當您調用一個構造函數,並且該構造函數被成功調用時,它被稱為構造函數調用。
  • 構造函數執行:如果調用構造函數,控制開始執行構造函數主體中的語句。 它被稱為構造函數執行。

Java 中構造函數鏈的關鍵規則

了解了構造函數鏈的基礎知識後,讓我們看一下在 Java 中使用構造函數鏈的一些基本規則:

  • this()只能調用屬於同一個Constructor的參數。
  • super() 只能調用直接超類的構造函數。
  • this() 和 super() 應該是構造函數中的第一條語句。
  • This () 和 super() 不能在同一個 Constructor 中使用,因為兩個人都需要成為第一個語句,這實際上是不可能的。
  • 你不能在同一個類的所有構造函數中都添加 this() ,因為至少應該有一個構造函數沒有 this() 語句。
  • Java中構造函數的調用和執行是相反的。 因此,如果以 A、B、C 的順序調用構造函數,則執行將以 C、B、A 的順序進行。

例如,在這裡,我們有兩個獨立的類,它們通過重載不同的構造函數來工作。 我們希望以 2、1、4、3、5 的順序執行構造函數。

要按順序執行構造函數,我們需要以相反的順序調用構造函數,如 5、3、4、1、2,請參見下面的示例。

父類

{

父母()// 1

{

這個(“你好”);

System.out.println("in Parent 0 arg constructor 1");

}

Parent(字符串消息)// 2

{

System.out.println(“在 Parent(String) 構造函數 2”);

}

}

類構造函數擴展父類

{

構造函數()// 3

{

this(10);// 調用 5 號構造函數

System.out.println("in Constructor 0 arg constructor 3");

}

構造函數(字符串消息)// 4

{

super();//調用1號父類構造函數

System.out.println(“in Constructor(String msg) arg constructor 4”);

}

構造函數(int i)// 5

{

this("hello");//調用4個數字的構造函數

System.out.println("in Constructor(int i) constructor 5");

}

// 主要()方法

public static void main(String[] args)

{

構造函數cobj = new Constructor(); // 調用 3 數字構造函數

}

}

輸出:

在 Parent(String) 構造函數中 2

在 Parent 0 arg 構造函數 1

in Constructor(String msg) arg 構造函數 4

在構造函數中(int i)構造函數 5

在構造函數 0 arg 構造函數 3

用最後一個例子總結 Java 中構造函數和構造函數鏈接的所有概念:

Emp類

{

公共字符串 EName;

公共國際收益;

公共字符串地址;

公共 Emp()

{

這(“拉胡爾”);

}

公共 Emp(字符串名稱)

{

這個(名字,140035);

}

public Emp(字符串名稱,int sal)

{

this(name, sal, “新德里”);

}

公共僱員(字符串名稱,int sal,字符串添加)

{

this.EName=名字;

這個.EEarnings=sal;

this.address=add;

}

無效顯示(){

System.out.println(“姓名:”+EName);

System.out.println(“工資:”+EEarnings);

System.out.println(“地址:”+地址);

}

public static void main(String[] args)

{

員工對象=新員工();

對象顯示();

}

}

輸出:

員工姓名:拉胡爾

員工工資:140035

員工地址:新德里

結論

這樣,我們就到了本文的結尾。 我們希望這能澄清您對 Java 中的構造函數鏈的疑慮,並進一步鞏固您的理解。 在 upGrad,我們相信幫助來自世界各地的學生充分發揮他們的潛力並在他們的職業生涯中取得成功。 我們的課程在設計時同時考慮到新手和經驗豐富的專業人士。

其中一門課程是 upGrad 的軟件工程與工作相關的 PG 認證,專為首次求職者設計。 查看課程內容並立即註冊! 從行業專家和領先的專業人士那裡學習所有相關的軟件工程技能,如 Java、DSA、OODAP、JavaScript、MERN、AWS 等。

問:在 Java 中是否可以鏈接兩個以上的構造函數?

Java 最多允許兩個構造函數鏈。 通過這樣做,您可以創建更複雜的對象並減少代碼重複。

問:當 Java 中的構造函數調用自身時,會發生什麼?

Java 中的構造函數調用自身將導致堆棧溢出錯誤和無限循環。

問:Java 中的默認構造函數是什麼樣子的?

Java 中的默認構造函數是不接受任何輸入的構造函數。 如果類中沒有聲明構造函數,則會自動生成一個。