實例變數初始化:宣告與建構子
在Java 類別中定義實例變數時,它們應該在宣告時實例化還是在建構函數內實例化?構造函數?讓我們深入研究一下兩種方法之間的優點和差異。
變體 1:帶初始化的聲明
class A { B b = new B(); }
變體 2:不含初始化的聲明
class A { B b; A() { b = new B(); } }
沒有差異
從技術角度來看,兩種方法之間沒有實際差異。編譯器會自動產生實例變數初始化程式碼並將其插入到類別的建構函式中。
可讀性
通常考慮在聲明時初始化的變體 1更具可讀性。它提供了變數聲明與其初始值之間的明確關聯。
異常處理
變體 2 在構造函數中初始化,允許異常處理。如果實例變數的初始化失敗,則會拋出異常並且物件保持未建構狀態。變體 1 不提供此功能。
初始化區塊
除了宣告和建構函式方法之外,Java 也支援使用初始化區塊。這些區塊也會被編譯器轉換為放置在建構函式中的程式碼。
{ a = new A(); }
延遲初始化
為了效能最佳化,開發人員可以選擇用於延遲初始化。在這種方法中,實例變數在第一次訪問之前不會被初始化:
ExpensiveObject o; public ExpensiveObject getExpensiveObject() { if (o == null) { o = new ExpensiveObject(); } return o; }
依賴注入
為了改善依賴管理,建議避免使用類別中的新運算符。相反,請考慮使用依賴項注入框架來處理依賴項的實例化和注入。
以上是Java中的實例變數初始化:宣告還是建構子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!