Java 引入 Lambda 時,與現有 API 保持兼容是首要考量。方法引用 在復用現有 API 中扮演關鍵角色,避免到處編寫 Lambda 表達式,使代碼更清晰。
interface 定義函數式接口(單一抽象方法)作為目標類型。@FunctionalInterface 標註非函數式接口會導致編譯錯誤。this 指向外層作用域對象,而非 Lambda 實例。final 關鍵字;但不可在 Lambda 中修改該變量值。靜態方法、實例方法、構造函數均可作為函數式接口實現,前提是參數與返回值匹配。
接口可定義 default 方法,實現類可選擇覆寫,便於 API 演進不破壞現有實現。
| 概念 | 說明 |
|---|---|
| GMT | 格林威治標準時間,現不作為標準使用 |
| UT | 世界時,1972 年前與 GMT 相同 |
| TAI | 國際原子時,秒的定義基於銫原子輻射 |
| UTC | 世界協調時間,含閏秒修正,與 UT 差 ≤ 0.9s |
| Unix Time | 自 1970-01-01 00:00:00 UTC 起的秒數,不含閏秒 |
| Epoch | 時間軸起點 |
yyyy-MM-ddTHH:mm:ss.SSS。Date 僅代表機器時間點,易誤導為日期。Calendar 可變、月份 0-based、線程不安全。| 類 | 用途 |
|---|---|
Instant | 機器時間點,納秒精度 |
LocalDate/LocalTime/LocalDateTime | 無時區的日期/時間/日期時間 |
ZonedDateTime/OffsetDateTime | 帶時區/偏移量的日期時間 |
Duration | 時間間隔(時分秒) |
Period | 日期間隔(年月日) |
DateTimeFormatter | 格式化/解析 |
plus/minus(TemporalAmount)、plus/minus(long, TemporalUnit) 進行時間運算。ChronoUnit 實現 TemporalUnit,支持 between() 計算差值。Date.toInstant()、Instant.from(Date)。近一個月學習讓我對 Java 產生濃厚興趣,期待與老師更多互動交流,深化理解。
| 週次 | 代碼行數 (新增/累積) | 博客數 (新增/累積) | 學習時長 (新增/累積, 小時) | 重要成長 |
|---|---|---|---|---|
| 目標 | 3000 | 30 | 400 | - |
| 第 1 週 | 100/100 | 2/2 | 20/20 | 環境搭建、基礎語法 |
| 第 2 週 | 100/200 | 2/4 | 18/38 | 面向對象核心 |
| 第 3 週 | 300/500 | 3/7 | 22/60 | 集合框架、異常處理 |