| 特性 | 核心內涵 | 現代補充 |
|---|---|---|
| 簡單性 | 移除 C++ 指標、多重繼承、運算子多載;語法接近 C/C++ 易上手 | Java 9+ 模組系統、Java 14+ Record 簡化資料類別 |
| 分散式 | 內建 `java.net`、RMI、Servlet API 支援網路程式 | 微服務框架、gRPC、Reactive Streams 成主流 |
| 物件導向 | 封裝、繼承、多態;單根繼承 (`Object`)、介面取代多重繼承 | Sealed Class (Java 17) 控制繼承層級 |
| 健壯性 | 強型別、自動記憶體管理、例外處理、編譯期+執行期檢查 | JVM 成熟 GC (ZGC, Shenandoah) 亞毫秒延遲 |
| 安全性 | 沙箱模型、類別載入器隔離、位元組碼驗證、安全管理員 | 模組系統強封裝、移除 Security Manager (Java 17) |
| 架構中立 | 編譯為位元組碼,JVM 解釋/即時編譯執行 | GraalVM Native Image 實現 AOT 編譯 |
| 可移植性 | 基本型別大小固定 (int 永遠 32-bit)、Unicode 字元集 | 容器化部署消除環境差異 |
| 多執行緒 | 內建 `Thread`、監視器鎖、`java.util.concurrent` 高階 API | 虛擬執行緒 - Project Loom (Java 21) 百萬級並發 |
| 動態性 | 執行期載入類別、反射、動態代理 | JDK 內建動態代理、ByteBuddy/ASM 位元組碼操作 |
public class User {
private final String id; // final 欄位必須在建構子初始化
private String name;
// 無參建構子 (框架常需)
public User() { this.id = UUID.randomUUID().toString(); }
// 全參建構子
public User(String id, String name) {
this.id = id;
this.name = name;
}
// 建構子鏈
public User(String name) { this(UUID.randomUUID().toString(), name); }
}
// 使用
User u1 = new User(); // 無參
User u2 = new User("Alice"); // 單參
User u3 = new User("id-1", "Bob"); // 雙參
關鍵點: 建構子無回傳值、名稱與類別同名、可多載、若未定義任何建構子則編譯器提供預設無參建構子。