Benjamin J. Evans是jClarity公司的聯閤創始人,倫敦Java用戶組的組織者,JCP執行委員會委員。Java Champion和JavaOne Rockstar榮譽得主。與人閤著有《Java程序員修煉之道》。他經常就Java平颱、性能、並發和相關主題 發錶公開演講。
David Flanagan是Mozilla的高級前端軟件工程師,著有《JavaScript權威指南》《Ruby編程語言》等。博客地址是:davidflanagan.com。
序 xv
前言 xvi
第一部分 Java 介紹
第1 章 Java 環境介紹 2
1.1 Java 語言、JVM 和生態係統 2
1.1.1 Java 語言是什麼 3
1.1.2 JVM 是什麼 4
1.1.3 Java 生態係統是什麼 5
1.2 Java 和JVM 簡史 6
1.3 Java 程序的生命周期 7
1.4 Java 的安全性 9
1.5 Java 和其他語言比較 9
1.5.1 Java 和C 語言比較 9
1.5.2 Java 和C++ 比較 10
1.5.3 Java 和PHP 比較 10
1.5.4 Java 和JavaScript 比較 10
1.6 迴應對Java 的一些批評 10
1.6.1 過度復雜 10
1.6.2 變化慢 11
1.6.3 性能問題 12
1.6.4 不安全 12
1.6.5 太注重企業 12
第2 章 Java 基本句法 13
2.1 Java 程序概覽 14
2.2 詞法結構 14
2.2.1 Unicode 字符集 14
2.2.2 區分大小寫與空白 14
2.2.3 注釋 15
2.2.4 保留字 16
2.2.5 標識符 16
2.2.6 字麵量 17
2.2.7 標點符號 17
2.3 基本數據類型 17
2.3.1 布爾類型 18
2.3.2 字符類型 18
2.3.3 整數類型 20
2.3.4 浮點數類型 21
2.3.5 基本類型之間的轉換 22
2.4 錶達式和運算符 24
2.4.1 運算符概述 25
2.4.2 算術運算符 28
2.4.3 字符串連接運算符 30
2.4.4 遞增和遞減運算符 30
2.4.5 比較運算符 31
2.4.6 邏輯運算符 32
2.4.7 位運算符和位移運算符 33
2.4.8 賦值運算符 35
2.4.9 條件運算符 36
2.4.10 instanceof 操作符 36
2.4.11 特殊運算符 37
2.5 語句 38
2.5.1 錶達式語句 39
2.5.2 復閤語句 39
2.5.3 空語句 39
2.5.4 標注語句 40
2.5.5 局部變量聲明語句 40
2.5.6 if/else 語句 41
2.5.7 switch 語句 43
2.5.8 while 語句 45
2.5.9 do 語句 45
2.5.10 for 語句 46
2.5.11 遍曆語句 47
2.5.12 break 語句 48
2.5.13 continue 語句 49
2.5.14 return 語句 49
2.5.15 synchronized 語句 50
2.5.16 throw 語句 50
2.5.17 try/catch/finally 語句 51
2.5.18 處理資源的try 語句 53
2.5.19 assert 語句 54
2.6 方法 55
2.6.1 定義方法 55
2.6.2 方法修飾符 57
2.6.3 已檢異常和未檢異常 59
2.6.4 變長參數列錶 60
2.7 介紹類和對象 61
2.7.1 定義類 62
2.7.2 創建對象 62
2.7.3 使用對象 63
2.7.4 對象字麵量 63
2.7.5 lambda 錶達式 64
2.8 數組 65
2.8.1 數組的類型 65
2.8.2 創建和初始化數組 67
2.8.3 使用數組 68
2.8.4 多維數組 70
2.9 引用類型 72
2.9.1 引用類型與基本類型比較 72
2.9.2 處理對象和引用副本 73
2.9.3 比較對象 74
2.9.4 裝包和拆包轉換 75
2.10 包和Java 命名空間 76
2.10.1 聲明包 76
2.10.2 全局唯一的包名 77
2.10.3 導入類型 77
2.10.4 導入靜態成員 79
2.11 Java 文件的結構 80
2.12 定義並運行Java 程序 81
2.13 小結 82
第3 章 Java 麵嚮對象編程 83
3.1 類簡介 83
3.1.1 麵嚮對象的基本概念 83
3.1.2 其他引用類型 84
3.1.3 定義類的句法 85
3.2 字段和方法 85
3.2.1 聲明字段的句法 86
3.2.2 類字段 87
3.2.3 類方法 88
3.2.4 實例字段 89
3.2.5 實例方法 89
3.2.6 this 引用的工作方式 90
3.3 創建和初始化對象 91
3.3.1 定義構造方法 91
3.3.2 定義多個構造方法 92
3.3.3 在一個構造方法中調用另一個構造方法 92
3.3.4 字段的默認值和初始化程序 93
3.4 子類和繼承 95
3.4.1 擴展類 95
3.4.2 超類、對象和類層次結構 97
3.4.3 子類的構造方法 98
3.4.4 構造方法鏈和默認構造方法 98
3.4.5 遮蓋超類的字段 100
3.4.6 覆蓋超類的方法 101
3.5 數據隱藏和封裝 104
3.5.1 訪問控製 105
3.5.2 數據訪問器方法 110
3.6 抽象類和方法 111
3.7 修飾符總結 115
第4 章 Java 類型係統 117
4.1 接口 118
4.1.1 定義接口 118
4.1.2 擴展接口 119
4.1.3 實現接口 119
4.1.4 實現多個接口 121
4.1.5 默認方法 121
4.1.6 標記接口 123
4.2 Java 泛型 123
4.2.1 介紹泛型 124
4.2.2 泛型和類型參數 125
4.2.3 菱形句法 126
4.2.4 類型擦除 126
4.2.5 通配符 127
4.2.6 編譯時和運行時類型 131
4.3 枚舉和注解 131
4.3.1 枚舉 131
4.3.2 注解 133
4.3.3 自定義注解 134
4.3.4 類型注解 135
4.4 嵌套類型 135
4.4.1 靜態成員類型 136
4.4.2 非靜態成員類 138
4.4.3 局部類 141
4.4.4 詞法作用域和局部變量 144
4.4.5 匿名類 145
4.4.6 嵌套類型的運作方式 147
4.5 lambda 錶達式 148
4.5.1 轉換lambda 錶達式 150
4.5.2 方法引用 150
4.5.3 函數式編程 151
4.6 小結 152
第5 章 Java 的麵嚮對象設計 154
5.1 Java 的值 154
5.2 java.lang.Object 類的重要方法 155
5.2.1 toString() 方法 157
5.2.2 equals() 方法 157
5.2.3 hashCode() 方法 158
5.2.4 Comparable::compareTo() 方法 158
5.2.5 clone() 方法 159
5.3 麵嚮對象設計要略 159
5.3.1 常量 159
5.3.2 用接口還是抽象類 160
5.3.3 實例方法還是類方法 161
5.3.4 閤成還是繼承 163
5.3.5 字段繼承和訪問器 165
5.3.6 單例 167
5.4 異常和異常處理 168
5.5 Java 編程的安全性 170
第6 章 Java 實現內存管理和並發編程的方式 172
6.1 Java 內存管理的基本概念 172
6.1.1 Java 中的內存泄露 173
6.1.2 標記清除算法簡介 173
6.1.3 基本標記清除算法 174
6.2 JVM 優化垃圾迴收的方式 175
6.3 HotSpot 堆 178
6.3.1 迴收老年代 178
6.3.2 其他迴收程序 179
6.4 終結機製 180
6.5 Java 對並發編程的支持 181
6.5.1 綫程的生命周期 182
6.5.2 可見性和可變性 184
6.5.3 互斥和狀態保護 185
6.5.4 volatile 關鍵字 187
6.5.5 Thread 類中有用的方法 188
6.6 使用綫程 190
6.7 小結 192
第二部分 使用Java 平颱
第7 章 編程和文檔約定 194
7.1 命名和大小寫約定 194
7.2 實用的命名方式 196
7.3 Java 文檔注釋 197
7.3.1 文檔注釋的結構 198
7.3.2 文檔注釋標簽 198
7.3.3 行內文檔注釋標簽 201
7.3.4 文檔注釋中的交叉引用 203
7.3.5 包的文檔注釋 204
7.4 可移植程序的約定 205
第8 章 使用Java 集閤 208
8.1 介紹集閤API 208
8.1.1 Collection 接口 209
8.1.2 Set 接口 211
8.1.3 List 接口 213
8.1.4 Map 接口 217
8.1.5 Queue 接口和BlockingQueue 接口 220
8.1.6 實用方法 222
8.1.7 數組和輔助方法 224
8.2 在Java 集閤框架中使用lambda 錶達式 225
8.2.1 函數式方式 226
8.2.2 流API 229
8.3 小結 232
第9 章 處理常見的數據格式 233
9.1 文本 233
9.1.1 字符串的特殊句法 233
9.1.2 字符串的不可變性 235
9.1.3 正則錶達式 237
9.2 數字和數學運算 240
9.2.1 Java 錶示整數類型的方式 240
9.2.2 Java 中的浮點數 241
9.2.3 Java 的數學函數標準庫 243
9.3 在Java 8 中處理日期和時間 245
9.3.1 介紹Java 8 的日期和時間API 245
9.3.2 查詢 248
9.3.3 調節器 249
9.3.4 過時的日期和時間API 250
9.4 小結 251
第10 章 處理文件和I/O 252
10.1 Java 處理I/O 的經典方式 252
10.1.1 文件 253
10.1.2 流 254
10.1.3 Reader 和Writer 類 255
10.1.4 再次介紹TWR 256
10.1.5 I/O 經典處理方式的問題 257
10.2 Java 處理I/O 的現代方式 257
10.2.1 文件 258
10.2.2 路徑 259
10.3 NIO 中的通道和緩衝區 261
10.3.1 ByteBuffer 對象 261
10.3.2 映射字節緩衝區 263
10.4 異步I/O 263
10.4.1 基於Future 接口的方式 264
10.4.2 基於迴調的方式 264
10.4.3 監視服務和目錄搜索 265
10.5 網絡 266
10.5.1 HTTP 266
10.5.2 TCP 268
10.5.3 IP 270
第11 章 類加載、反射和方法句柄 271
11.1 類文件、類對象和元數據 271
11.1.1 類對象示例 271
11.1.2 類對象和元數據 272
11.2 類加載的各個階段 273
11.2.1 加載 273
11.2.2 驗證 274
11.2.3 準備和解析 274
11.2.4 初始化 275
11.3 安全的編程和類加載 276
11.4 應用類加載知識 277
11.5 反射 280
11.5.1 什麼時候使用反射 280
11.5.2 如何使用反射 280
11.6 動態代理 284
11.7 方法句柄 285
11.7.1 MethodType 對象 285
11.7.2 方法查找 286
11.7.3 調用方法句柄 287
第12 章 Nashorn 289
12.1 介紹Nashorn 289
12.1.1 在JVM 中運行Java 之外的語言 289
12.1.2 目的 290
12.2 在Nashorn 中執行JavaScript 代碼 290
12.2.1 在命令行中運行 291
12.2.2 使用Nashorn shell 291
12.2.3 在jjs 中編寫腳本 293
12.3 Nashorn 和javax.script 包 297
12.4 Nashorn 的高級用法 299
12.4.1 在Nashorn 中調用Java 代碼 299
12.4.2 Nashorn 對JavaScript 語言所做的擴展 302
12.4.3 實現細節 303
12.5 小結 304
第13 章 平颱工具和配置 306
13.1 命令行工具 306
13.1.1 javac 307
13.1.2 java 309
13.1.3 jar 310
13.1.4 javadoc 312
13.1.5 jdeps 313
13.1.6 jps 314
13.1.7 jstat 315
13.1.8 jstatd 315
13.1.9 jinfo 316
13.1.10 jstack 317
13.1.11 jmap 317
13.1.12 javap 318
13.2 VisualVM 318
13.3 Java 8 配置 324
13.3.1 目的 324
13.3.2 緊湊配置 325
13.4 小結 328
作者簡介 329
封麵介紹 329
· · · · · · (
收起)