iT邦幫忙

2026 iThome 鐵人賽

DAY 0
0
Build on Google AI

把Google AI當夥伴打造個人高效Coding工作流系列 第 4 篇

第四天 物件初始化完整順序與 this 核心

  • 分享至 

  • xImage
  •  

一、 封裝的真正意義不只是把欄位設為private加Getter/Setter
在很多教科書中,封裝常被簡化為:
把欄位改成private,用IDE一鍵生成所有欄位的getter與setter。
這是嚴重的封裝反模式Anemic Domain Model。
如果每個屬性都有公開的setter,外部程式碼隨時可以修改物件內部狀態,那與直接將欄位設為public幾乎沒有本質區別。
真正的封裝是保護物件的不變性Invariant,封裝的核心是對外隱藏實作細節,由物件自己保證資料的合法性與一致性。


二、 物件誕生的流水線:完整的初始化順序
https://ithelp.ithome.com.tw/upload/images/20260930/20184350UTvhM4zrVQ.png
https://ithelp.ithome.com.tw/upload/images/20260930/20184350BDMnq1T5aF.png
當JVM遇到new Child()的時後

  • 先靜態後實例:類別層級的靜態成員只在類別載入(Class Loading)時執行一次;實例層級的成員每次 new 都會執行。
  • 先父類別後子類別:沒有父親就沒有孩子,必須先確保父類別的狀態建構完成。
  • 區塊與欄位看編譯順序:一般成員變數賦值與普通程式碼區塊(Instance Block),依照在檔案中的出現順序執行。

三、 this的三種工程用法
this代表當前物件實例的引用,在架構設計中有三個核心使用場景:

  • 區分成員變數與局部變數Shadowing
    當方法參數或區域變數名稱與類別欄位重名時,局部變數會遮蔽(Shadow)成員變數。
  • 建構子重載委派Constructor Chaining
    為了支援靈活的參數組合,通常會提供多個建構子。如果每個建構子都重複寫驗證邏輯,會違反Don't Repeat Yourself原則。
    利用this(...)可以讓次要建構子把請求集中導向主建構子Canonical Constructor。
  • 方法鏈式調用Fluent API / Method Chaining
    在建造者模式Builder Pattern或鏈式配置中,方法返回this可以讓API調用流暢乾淨。

四、永遠不要在建構子中逸出this(This Escape)
這是在併發或多執行緒環境中非常隱蔽的危險反模式。
https://ithelp.ithome.com.tw/upload/images/20260930/20184350eF5HuPWLZr.png


上一篇
第三天記憶體Heap模型與「只有Pass by Value」
下一篇
第五天 繼承與方法改寫的陷阱,super調用鏈與Object核心方法
系列文
把Google AI當夥伴打造個人高效Coding工作流 共 6 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言