Java 基礎語法掌握後,進階開發者必須征服反射機制、介面契約、內部類封裝、代理模式四大核心領域。這些特性構成了框架開發、庫設計、動態擴展的基石,是邁向架構師的必經之路。
| API | 用途 |
|---|---|
| `Field` | 檢查/修改欄位 (含私有,需 `setAccessible(true)`) |
| `Method` | 檢查/調用方法 (含私有),支援參數型別檢查 |
| `Constructor` | 檢查/實例化建構子 |
Java 無 C 風格函數指標。需傳遞行為時,定義單一方法介面 (SAM),實作類傳遞實例。JDK 8+ Lambda 進一步簡化:`Runnable r = () -> System.out.println("Hi");`
回調模式:指定「特定事件發生時調用對象的某方法」。
// 經典範例:ActionListener
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { /* 回調邏輯 */ }
});
// 相關 API
javax.swing.Timer // 定時回調
javax.swing.JOptionPane // 對話框關閉回調
java.awt.Toolkit // 系統級事件回調
此模式是 Spring IoC、事件驅動架構、觀察者模式的基礎變體。
| 類型 | 特徵 | 典型用途 |
|---|---|---|
| 成員內部類 | 非 static,關聯外部實例 | 迭代器、視圖適配器 |
| 靜態巢狀類 | static,無外部實例引用 | Builder 模式、DTO、工具類 |
| 區域內部類 | 定義在方法/區塊內 | 複雜邏輯封裝、臨時實作 |
| 匿名內部類 | 無名稱,即時實作介面/繼承類 | 事件監聽、執行緒、比較器 |
`java.lang.reflect.Proxy` 動態生成實現指定介面集合的類:
Interface proxy = (Interface) Proxy.newProxyInstance(
classLoader,
new Class[] { Interface.class },
(proxyObj, method, args) -> {
// 統一前置邏輯
Object result = method.invoke(target, args);
// 統一後置邏輯
return result;
}
);
Java 8 大基本型別:
| 分類 | 型別 | 位數 | 預設值 | 包裝類 |
|---|---|---|---|---|
| 整數 | byte | 8 | 0 | Byte |
| short | 16 | 0 | Short | |
| int | 32 | 0 | Integer | |
| long | 64 | 0L | Long | |
| 浮點 | float | 32 | 0.0f | Float |
| double | 64 | 0.0 | Double | |
| 字符 | char | 16 | '\u0000' | Character |
| 布林 | boolean | 1 (JVM 實作相關) | false | Boolean |
反射賦予「運行時感知與操控類型」的元編程能力;介面確立「契約優於實作」的架構邊界;內部類提供「封裝與上下文存取」的語法糖;代理實現「橫切關注點無侵入式織入」。四大特性交織出 Java 動態性、擴展性、框架友好的核心基因。深度掌握它們,才能從「寫出能跑的代碼」進化為「設計優雅可演化的系統」。