首頁 >Java >java教程 >Java中的遞歸建構函式調用

Java中的遞歸建構函式調用

WBOY
WBOY轉載
2023-08-27 15:41:071458瀏覽

Java中的遞歸建構函式調用

遞歸建構函式呼叫是一個在編譯時發生的錯誤,當一個建構函式呼叫自身時會出現這個錯誤。它類似於遞歸,其中一個方法根據需要多次呼叫自身。呼叫自身的方法稱為遞歸方法,呼叫自身的建構函式稱為遞歸建構函式。

在本文中,我們將透過幾個範例來了解Java中的遞歸建構函式呼叫錯誤。

遞歸建構函式呼叫

建構子

它與方法非常相似,但區別在於方法定義了物件的行為,而建構函數用於初始化這些物件。我們可以為方法提供任何我們選擇的名稱,但建構子必須與類別名稱相同。此外,方法可以傳回一個值,但建構函式不會傳回任何值,因為它們不能有任何回傳類型。

當使用者沒有建立任何建構函式時,Java編譯器會自動建立一個建構函式(我們稱之為預設建構函式)。

範例 1

public class Cnst { // class name
   Cnst() { 
     // constructor 
     System.out.println("I am constructor");
   }
   public static void main(String[] args) {
     Cnst obj = new Cnst();  
     // calling the Constructor
   }
}

輸出

I am constructor

儘管建構函式和方法之間有相似之處,但 Java 不允許遞歸建構函式。這是一種不好的程式設計習慣。

範例 2

以下範例說明了遞歸建構函式呼叫錯誤。

在這裡,我們將建立一個類別並定義其建構函式和兩個參數。然後,我們將在其體內呼叫相同的建構函數。

public class Cart {
   String item;
   double price;
   Cart(String item, int price) { // constructor
     this(item, price); // constructor is calling itself
	// this keyword shows these variables belong to constructor
     this.item = item; 
     this.price = price;
   }
   public static void main(String[] args) {
     Cart obj = new Cart("Bread", 15); // creating object
     System.out.println("Constructor calling another Constructor");
   }
}

輸出

Cart.java:4: error: recursive constructor invocation
Cart(String item, int price) { // constructor
   ^
1 error

Example 3

的中文翻譯為:

範例3

#在下面的範例中,我們將嘗試在建構函式內部定義一個對象,以檢查Java是否允許在建構函式內建立物件。

public class Cart {
   String item;
   double price;
   Cart(String item, int price) { 
   // constructor
	// this keyword shows these variables belong to constructor
     this.item = item; 
     this.price = price;
     Cart obj2 = new Cart("Milk", 55); 
     // creating object
   }
   public static void main(String[] args) {
     Cart obj1 = new Cart("Bread", 15); 
     // creating another object
     System.out.println("Constructor calling another Constructor");
   }
}

輸出

Exception in thread "main" java.lang.StackOverflowError
	at Cart.<init>(Cart.java:9)
	at Cart.<init>(Cart.java:9)
	at Cart.<init>(Cart.java:9)
	at Cart.<init>(Cart.java:9)
	at Cart.<init>(Cart.java:9)
	at Cart.<init>(Cart.java:9)
	at Cart.<init>(Cart.java:9)

我們遇到StackOverflowError錯誤,因為在建構函式內部建立物件會導致無限循環的物件建立。

Example 4

的中文翻譯為:

範例4

#以下範例示範了在另一個建構函式中呼叫建構函式是合法的。

public class Cart { 
   // class
   String item;
   double price;
   Cart(String item, int price) { 
   // first constructor
	// this keyword shows these variables belong to constructor
     this.item = item; 
     this.price = price;
   }
   public Cart (int price) { 
   // second constructor
     this(null, price); 
     // calling the 1st constructor
   }
   public static void main(String[] args) {
     Cart obj = new Cart(15); 
     // creating object
     System.out.println("Constructor calling another Constructor");
   }
}

輸出

Constructor calling another Constructor

結論

Java不允許建構函數的遞歸,因此明顯應該避免這種程式設計實作。在本文中,我們從討論建構函式開始,試圖解釋遞歸建構函式。此外,我們還發現了另一個名為StackOverflowError的錯誤,該錯誤是由於無限循環而引起的。

以上是Java中的遞歸建構函式調用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除