作者簡介
林信良(網名:良葛格),自由工作者,擅長技術寫作、翻譯與培訓。喜歡研究程式設計語言、開發架構、社交媒體,從中學習設計思想、規範及文化,並利用閒暇時間記錄所學。技術文章 及書籍涵蓋C/C++、Java、Python、JavaScript、Haskell、OpenSCAD等領域。目前出版的著作有《JSP & Servlet學習筆記》(第2版)、《Spring 2 0技術手冊》《Java JDK 9學習筆記》等,譯作有《Ajax實戰手冊》《jQuery實戰手冊》(第2版)等。
目錄
第1章 Java平臺概述 1
1 1 Java不只是語言 1
1 1 1 Java的前世今生 1
1 1 2 三大平臺 5
1 1 3 JCP與JSR 7
1 1 4O racleJDK與OpenJDK 8
1 2 JVM/JRE/JDK 10
1 2 1 什麼是JVM 10
1 2 2 JRE與JDK 12
1 2 3 下載並安裝JDK 13
1 2 4 瞭解JDK安裝內容 15
第2章 從JDK到IDE 17
2 1 從”Hello,World”開始 17
2 1 1 編寫Java原始程式碼 17
2 1 PATH是什麼 20
2 1 3 JVM(java)與CLASSPATH
2 1 編譯器(javac)與CLASSPATH 26
2 2 管理原始程式碼和位元組碼檔 27
2 2 1 編譯器(javac)與SOURCEPATH 28
2 2 2 通過package對類進行管理 29
2 2 3 使用import簡化操作 31
2 3 初識模組平臺系統 34
2 3 1 JVM(java)與module-path 34
2 3 2 編譯器(javac)與module-path 37
2 3 編譯器(javac)與module-source-path 38
2 4 使用IDE 39
2 4 1 IDE專案管理基礎 39
2 4 2 使用了哪個JRE 43
2 4 3 類檔版本 45
第3章 基礎語法 48
3 1 類型、變數和運算子 48
3 1 1 類型 48
3 1 2 變數 52
3 1 3 運算子 55
3 1 4 處理類型: 62
3 2 流程控制 66
3 2 1 if else條件運算式 66
3 2 2 switch條件運算式 69
3 2 3 for迴圈 72
3 2 4 while德環 74
3 2 5 break和continue 75
課後練習 77
第4章 認識物件 78
4 1 類與實例 78
4 1 1 定義類 78
4 1 2 使用標準類 82
4 1 3 對象賦值與相等性 85
4 2 基本類型包裝器 87
4 2 1 包裹基本類型 87
4 2 2 自動裝箱與拆箱 88
4 2 3 自動裝箱與拆箱的內幕 89
4 3 陣列物件 92
4 3 1 陣列基礎 92
4 3 2 運算元據對象 95
4 3 3 複製陣列 101
4 4 字串物件 105
4 4 1 字串基礎 105
4 4 2 字串特性 108
4 4 3 文字區塊 112
4 4 原始程式碼編碼 114
4 4 5 Java與Unicode 117
4 5 查詢JavaAPI文檔 120
課後練習 124
第5章 對象封裝 126
5 1 什麼是封裝 126
5 1 1 封裝物件初始流程 126
5 1 2 物件封裝的操作流程 129
5 1 3 封裝物件的內部資料 132
5 2 類的語法細節 135
5 2 1 public許可權設定 135
5 2 2 關於構造函數 137
5 2 3 構造函數與方法重載 138
5 2 4 使用this 140
5 2 5 static類成員 144
5 2 6 變長參數 149
5 2 7 內部類 150
課後練習 152
第6章 繼承與多態 154
6 1 什麼是繼承 154
6 1 1 繼承共同行為與實現 154
6 1 2 多態與從屬 158
6 1 3 重新定義實現 163
6 1 4 抽象方法、抽象類別 166
6 2 繼承語法細節 167
6 2 1 protected成員 167
6 2 2 覆蓋的細節 169
6 2 3 再看構造函數 171
6 2 4 再看final關鍵字 173
6 2 5 javalang Object 174
6 2 6 關於垃圾收集 181
6 2 7 再看抽象類別 184
課後練習 186
第7章 介面與多態 188
7 1 什麼是介面 188
7 1 1 使用介面定義行為 188
7 1 2 行為的多態 193
7 1 3 解決需求變化 196
7 2 介面的語法細節 203
7 2 1 介面的預設設定 203
7 2 2 匿名內部類 207
7 2 3 使用enum列舉常量 212
課後練習 214
第8章 異常處理 215
8 1 語法與繼承架構 215
8 1 1 使用try、catch 215
8 1 2 異常繼承架構 218
8 1 3 要抓還是要拋 223
8 1 4 貼心還是製造麻煩 225
8 1 5 瞭解堆疊跟蹤 228
8 1 6 關於assert 232
8 2 異常與資源管理 235
8 2 1 使用finally 235
8 2 2 自動嘗試關閉資源 237
8 2 3 java lang AutoCloseable
介面 240
課後習題 243
第9章 Collection與Map 244
9 1 使用Collection收集物件 244
9 1 1 認識Collection架構: 244
9 1 2 帶有索引的List 246
9 1 3 內容不重複的Set 250
9 1 4 支援佇列操作的Queue 255
9 1 5 使用泛型 258
9 1 6 Lambda運算式簡介 263
9 1 7 Iterable與Iterator 265
9 1 8 Comparable與Comparator 268
9 2 鍵值對與Map 273
9 2 1 常用Map實現的類 274
9 2 2 遍歷Map鍵值 278
9 3 不可變的Collection與Map 281
9 3 1 不可變特性簡介 281
9 3 2 Collections的unmodifiableXXX()方法 282
9 3 3 List、Set、Map的of()方法 284
課後練習 287
第10章 輸入/輸出 288
10 1 InputStream與OutputStream 288
10 1 1 流設計概念 288
10 1 2 流繼承架構 292
10 1 3 流處理包裝器 295
10 2 字元處理類 300
10 2 1 Reader與Writer繼承架構 300
10 2 2 字元處理裝飾器 302
課後練習 304
第11章 執行緒與並行API 306
11 1 執行緒 306
11 1 1 執行緒簡介 306
11 1 2 Thread與Runnable 309
11 1 3 執行緒生命週期 311
11 1 4 關於ThreadGroup 318
11 1 5 synchronized與volatile 321
11 1 6 等待與通知 333
11 2 並行API 338
11 2 1 Lock、ReadWriteLock與Condition 338
11 2 2 使用Executor 348
11 2 3 並行Collection簡介 357
課後練習 361
第12章 Lambda 362
12 1 認識Lambda語法 362
12 1 1 Lambda語法概覽 362
12 1 2 Lambda運算式與函數式介面 366
12 1 3 當Lambda遇上this與final時 368
12 1 4 方法與構造函數引用 370
12 1 5 介面預設方法 373
12 2 Functional與StreamAPI 377
12 2 1 使用Optional取代null 377
12 2 2 標準API的函數式介面 380
12 2 3 使用Stream進行管道操作 383
12 2 4 對Stream進行reduce與collect 386
12 2 5 關於flatMap()方法 392
12 2 6 與Stream相關的API 395
12 2 7 活用Optional與Stream 396
12 3 Lambda、並行化與非同步處理 399
12 3 Stream與並行化 399
12 3 2 Arrays與並行化 403
12 3 3 通過CompletableFuture
進行非同步處理 404
課後練習 408
第13章 時間與日期 409
13 1 認識時間與日期 409
13 1 1 衡量時間 409
13 1 2 年曆簡介 411
13 1 3 認識時區 412
13 2 認識Date與Calendar 412
13 2 1 時間軸上瞬間的Date 413
13 2 2 處理時間與日期的Calendar 414
13 3 新時間與日期API 417
13 3 1 機器時間觀點的API 417
13 3 2 人類時間觀點的API 419
13 3 3 對時間的運算 422
13 3 4 年曆系統設計 425
課後練習 426
第14章 NIO與NIO2 427
14 1 認識NIO 427
14 1 1 NIO概述 427
14 1 2 Channel架構與操作 428he
14 1 3 Buffer架構與操作 429
14 2 NIO2檔案系統 433
14 2 1 NIO2架構 433
14 2 2 操作路徑 434
14 2 3 屬性讀取與設定 437
14 2 4 操作檔與資料夾 440
14 2 5 讀取、訪問資料夾 443
14 2 6 過濾、搜索文件 448
課後練習 451
第15章 通用API 452
15 1 日誌 452
15 1 1 日誌API簡介 452
15 1 2 指定日誌層級 454
15 1 3 使用Handler與Formatter 457
15 1 4 自訂Handler、Formatter與Filter 458
15 1 5 使用logging properties 461
15 2 HTTPClientAPI 462
15 2 1 淺談URI與HTTP 462
15 2 2 HTTP Client API入門 466
15 2 3 發送請求資訊 469
15 3 規則運算式 473
15 3 1 規則運算式簡介 473
15 3 2 quote()與quoteReplacement() 481
15 3 3 Pattern與Matcher 482
15 3 4 Unicode規則運算式 487
15 處理數位 490
15 4 1 使用BigInte