本文的主要教訓
五個建構子規則
Java中的建構子是一種用來初始化物件的特殊方法。它在創建類別物件時會自動調用,負責設定物件屬性的初始狀態和值。
每個類別至少有一個建構子。如果沒有宣告建構函數,編譯器將插入一個預設的無參數建構函數。
這是輸出
如果父建構子接受參數,則 super() 建構子也會接受參數。
我們將 super() 指令稱為父建構函數,即使是那些有參數的指令。
在Java 中,如果建構函式沒有明確地呼叫同一個類別中的另一個建構函式(使用this(...))或父建構子(使用super(...)),那麼Java 編譯器將會隱式插入對父類別的無參構造函數(super())。此行為確保父類別的初始化邏輯在子類別的邏輯之前運行
子類別可以定義無參構造函數,即使它們的父類別沒有定義。子構造函數透過明確呼叫 super() 指令來映射父建構子。
父建構子總是在子建構子之前執行。當您使用 new 關鍵字建立類別的新實例時,將會呼叫它們。類別中的每個建構函式可以有不同的參數(建構函式重載),從而允許使用不同的方式來初始化物件。
1。使用 new
呼叫建構函數
當使用 new 建立類別的實例時,會呼叫對應的建構子。如果有多個建構函數,則選擇參數匹配的建構函數。
new Person() 呼叫無參建構子。
new Person("Alice", 25) 使用兩個參數呼叫建構子。
2。從另一個建構函式呼叫一個建構函式(建構函式鏈)
在類別中,您可以使用 this(...) 從另一個建構函式呼叫一個建構函式。這稱為構造函數鏈。它有助於重複使用建構函數邏輯並避免程式碼重複。
在上面, new Car("Toyota") 使用一個參數呼叫建構函數,然後呼叫 this(model, 2023) 連結到具有兩個參數的建構子。
3。呼叫父建構子 (super(...))
當一個類別擴展另一個類別時,可以使用 super(...) 呼叫父類別的建構子。如果父類別沒有無參建構函數或您想將特定參數傳遞給父建構函數,則這是必需的。
.
在上面,new Dog("Buddy") 呼叫 Dog 建構函數,然後呼叫 super("Mammal") 來初始化 Animal` 類別中的 typefield。
1。物件初始化: 建構函式確保物件在建立後立即處於有效狀態。透過初始化欄位和設定必要的數據,建構函數保證物件在實例化後可以立即使用。
2。重載靈活性: Java 允許重載建構函數,從而支援多種方式建立和初始化物件。這種靈活性有助於處理各種初始化要求並簡化不同上下文中的物件建立。
3。初始化邏輯的封裝: 建構函式封裝初始化邏輯,使設定程式碼保持井井有條,並允許輕鬆修改,而不會影響類別的其餘部分或客戶端程式碼。這也隱藏了複雜的設定細節,簡化了其他開發人員的物件創建。
4。不可變物件建立: 對於設計為不可變的類,建構函式允許一次性設定所有必需字段,從而無法在以後修改它們。這對於在多線程應用程式中創建可靠、線程安全的物件至關重要。
5。透過連結實現程式碼可重用性: 建構函式可以相互呼叫(使用 this(...) 或 super(...)),從而在同一類別中或從父類別中啟用共享初始化邏輯。這有助於避免冗餘並促進更乾淨、DRY(不要重複自己)的程式碼。
6。強制執行必填欄位: 建構函式允許在建立物件時設定必填欄位。如果沒有建構函數,則可能會遺失必需的字段,從而可能使物件處於不完整或不一致的狀態。
7。增強可讀性: 建構函式透過明確哪些參數對於物件建立至關重要來提高程式碼可讀性。這使得其他開發人員清楚需要哪些值來正確初始化物件。
8。自動呼叫超類別建構子:建構子自動呼叫超類別建構函數,確保先執行父類別的欄位和初始化邏輯。這種自動呼叫透過設定整個類別層次結構來支援繼承。
9。支援依賴注入: 建構子是依賴注入的理想選擇,特別是在 Spring 這樣的框架中,可以透過建構子參數注入依賴項。這種方法增強了應用程式的模組化、可測試性和靈活性。
10。簡化 API 和庫中的物件建立: 對於函式庫或 API 用戶,建構函式提供了一種以最少的設定建立物件的簡單方法。這改善了使用者體驗,因為他們在創建物件後不需要執行複雜的配置。
結論
建構函數在 Java 中起著至關重要的作用,為物件初始化和設定提供了強大的機制。它們確保物件以有效狀態創建,透過重載支援靈活的初始化,並透過邏輯連結和封裝來提高程式碼可重用性。透過在擴充類別時呼叫父建構函數,Java 維護了一種結構化的繼承方法,增強了物件的完整性和可讀性。
以上是java中的構造函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!