目錄
遞歸建構函式呼叫
建構子
範例4
輸出
Example 4
結論
首頁 Java java教程 Java中的遞歸建構函式調用

Java中的遞歸建構函式調用

Aug 27, 2023 pm 03:41 PM
建構函數 遞迴 呼叫

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
C++ 函式的遞歸實作:遞迴深度有限制嗎? C++ 函式的遞歸實作:遞迴深度有限制嗎? Apr 23, 2024 am 09:30 AM

C++函數的遞歸深度受到限制,超過此限制會導致堆疊溢位錯誤。限制值因係統和編譯器而異,通常在1000到10000之間。解決方法包括:1.尾遞歸最佳化;2.尾呼叫;3.迭代實作。

C++ lambda 表達式是否支援遞迴? C++ lambda 表達式是否支援遞迴? Apr 17, 2024 pm 09:06 PM

是的,C++Lambda表達式可以透過使用std::function支援遞歸:使用std::function捕捉Lambda表達式的參考。透過捕獲的引用,Lambda表達式可以遞歸呼叫自身。

C++ 函式的遞迴實作:遞迴與非遞迴演算法的比較分析? C++ 函式的遞迴實作:遞迴與非遞迴演算法的比較分析? Apr 22, 2024 pm 03:18 PM

遞歸演算法透過函數自呼叫解決結構化的問題,優點是簡潔易懂,缺點是效率較低且可能發生堆疊溢位;非遞歸演算法透過明確管理堆疊資料結構避免遞歸,優點是效率更高且避免堆疊溢出,缺點是程式碼可能更複雜。選擇遞歸或非遞歸取決於問題和實現的特定限制。

在Java中遞歸地計算子字串出現的次數 在Java中遞歸地計算子字串出現的次數 Sep 17, 2023 pm 07:49 PM

給定兩個字串str_1和str_2。目標是使用遞歸過程計算字串str1中子字串str2的出現次數。遞歸函數是在其定義中呼叫自身的函數。如果str1是"Iknowthatyouknowthatiknow",str2是"know"出現次數為-3讓我們透過範例來理解。例如輸入str1="TPisTPareTPamTP",str2="TP";輸出Countofoccurrencesofasubstringrecursi

C++ 遞歸進階:瞭解尾遞歸最佳化及其應用 C++ 遞歸進階:瞭解尾遞歸最佳化及其應用 Apr 30, 2024 am 10:45 AM

尾遞歸最佳化(TRO)可提高特定遞歸呼叫的效率。它將尾遞歸呼叫轉換為跳轉指令,並將上下文狀態保存在暫存器中,而不是堆疊上,從而消除對堆疊的額外呼叫和返回操作,提高演算法效率。利用TRO,我們可以針對尾遞歸函數(例如階乘計算)進行最佳化,透過將tail遞歸呼叫替換為goto語句,編譯器會將goto跳轉移化為TRO,最佳化遞歸演算法的執行。

C++ 函式遞歸詳解:遞迴在字串處理中的應用 C++ 函式遞歸詳解:遞迴在字串處理中的應用 Apr 30, 2024 am 10:30 AM

遞歸函數是一種在字串處理中反覆呼叫自身來解決問題的技術。它需要一個終止條件以防止無限遞歸。遞歸在字串反轉和回文檢查等操作中被廣泛使用。

C++ 函式遞歸詳解:尾遞歸最佳化 C++ 函式遞歸詳解:尾遞歸最佳化 May 03, 2024 pm 04:42 PM

遞歸定義及最佳化:遞歸:函數內部呼叫自身,解決可分解為更小子問題的難題。尾遞歸:函數進行所有計算後才進行遞歸調用,可最佳化為循環。尾遞歸最佳化條件:遞歸呼叫為最後操作。遞歸呼叫參數與原始呼叫參數相同。實戰範例:計算階乘:輔助函數factorial_helper實現尾遞歸最佳化,消除呼叫棧,提高效率。計算斐波那契數列:尾遞歸函數fibonacci_helper利用最佳化,高效率計算斐波那契數。

如何解決PHP開發中的外部資源存取和調用 如何解決PHP開發中的外部資源存取和調用 Oct 08, 2023 am 11:01 AM

如何解決PHP開發中的外部資源存取和調用,需要具體程式碼範例在PHP開發中,我們經常會遇到需要存取和調用外部資源的情況,例如API介面、第三方庫或其他伺服器資源。在處理這些外部資源時,我們需要考慮如何進行安全的存取和調用,同時確保效能和可靠性。本文將介紹幾種常見的解決方案,並提供相應的程式碼範例。一、使用curl函式庫進行外部資源呼叫curl是一個非常強大的開源函式庫

See all articles