本書是Java語(yǔ)言**版本的規(guī)范,全書從Java*基礎(chǔ)的文法、類型、變量到高級(jí)特性lambda表達(dá)式、線程與鎖等進(jìn)行了詳盡闡述。該規(guī)范針對(duì)每一項(xiàng)語(yǔ)言特性都給出了代表性的示例程序,以幫助讀者更容易地理解和掌握這些特性。讀者通過閱讀本規(guī)范,可以全面系統(tǒng)地了解Java語(yǔ)言的各項(xiàng)特性,為充分利用這些特性來(lái)編寫出更加高效簡(jiǎn)潔的Java程序提供幫助。讀者還可以從Oracle的Java官方網(wǎng)站上看到本書的**進(jìn)展和修訂,以了解Java語(yǔ)言的**發(fā)展動(dòng)向。
目 錄
The Java Language Specification, Java SE 8 Edition
出版者的話
譯者序
前言
第1章 概述 1
1.1 本書結(jié)構(gòu) 1
1.2 樣例程序 4
1.3 表示法 4
1.4 與預(yù)定義的類和接口的關(guān)系 4
1.5 反饋 5
1.6 參考文獻(xiàn) 5
第2章 文法 6
2.1 上下文無(wú)關(guān)文法 6
2.2 詞法 6
2.3 句法 6
2.4 文法表示法 6
第3章 詞法結(jié)構(gòu) 9
3.1 Unicode 9
3.2 詞法翻譯 10
3.3 Unicode轉(zhuǎn)義字符 10
3.4 行終止符 11
3.5 輸入元素和符號(hào) 12
3.6 空白字符 12
3.7 注釋 13
3.8 標(biāo)識(shí)符 14
3.9 關(guān)鍵字 15
3.10 字面常量 15
3.10.1 整數(shù)字面常量 15
3.10.2 浮點(diǎn)數(shù)字面常量 19
3.10.3 布爾字面常量 21
3.10.4 字符字面常量 21
3.10.5 字符串字面常量 22
3.10.6 字符和字符串字面常量的
轉(zhuǎn)義序列 23
3.10.7 空字面常量 24
3.11 分隔符 24
3.12 操作符 24
第4章 類型、值和變量 25
4.1 類型和值的種類 25
4.2 簡(jiǎn)單類型和值 25
4.2.1 整數(shù)類型和值 26
4.2.2 整數(shù)操作 26
4.2.3 浮點(diǎn)數(shù)類型、格式和值 27
4.2.4 浮點(diǎn)數(shù)操作 29
4.2.5 boolean類型和布爾值 31
4.3 引用類型和值 32
4.3.1 對(duì)象 33
4.3.2 Object類 35
4.3.3 String類 35
4.3.4 當(dāng)引用類型相同時(shí) 35
4.4 類型變量 36
4.5 參數(shù)化類型 37
4.5.1 參數(shù)化類型的類型引元 38
4.5.2 參數(shù)化類型的成員和構(gòu)造器 40
4.6 類型擦除 40
4.7 可具化類型 41
4.8 原生類型 42
4.9 交集類型 45
4.10 子類型化 45
4.10.1 簡(jiǎn)單類型之間的子類型化 46
4.10.2 類與接口類型之間的子類型化 46
4.10.3 數(shù)組類型之間的子類型化 47
4.10.4 **上邊界 47
4.11 使用類型之處 49
4.12 變量 52
4.12.1 簡(jiǎn)單類型的變量 52
4.12.2 引用類型的變量 52
4.12.3 變量的種類 54
4.12.4 final變量 55
4.12.5 變量的初始值 56
4.12.6 類型、類和接口 57
第5章 類型轉(zhuǎn)換與上下文 59
5.1 轉(zhuǎn)換的種類 61
5.1.1 標(biāo)識(shí)轉(zhuǎn)換 61
5.1.2 拓寬簡(jiǎn)單類型轉(zhuǎn)換 61
5.1.3 窄化簡(jiǎn)單類型轉(zhuǎn)換 62
5.1.4 拓寬和窄化簡(jiǎn)單類型轉(zhuǎn)換 64
5.1.5 拓寬引用類型轉(zhuǎn)換 64
5.1.6 窄化引用類型轉(zhuǎn)換 64
5.1.7 裝箱轉(zhuǎn)換 65
5.1.8 拆箱轉(zhuǎn)換 66
5.1.9 非受檢轉(zhuǎn)換 67
5.1.10 捕獲轉(zhuǎn)換 67
5.1.11 字符串轉(zhuǎn)換 69
5.1.12 被禁止的轉(zhuǎn)換 69
5.1.13 值集轉(zhuǎn)換 70
5.2 賦值上下文 70
5.3 方法調(diào)用上下文 74
5.4 字符串上下文 75
5.5 強(qiáng)制類型轉(zhuǎn)換上下文 75
5.5.1 引用類型強(qiáng)制類型轉(zhuǎn)換 77
5.5.2 受檢強(qiáng)制類型轉(zhuǎn)換和非受檢強(qiáng)制類型轉(zhuǎn)換 79
5.5.3 運(yùn)行時(shí)的受檢強(qiáng)制類型轉(zhuǎn)換 80
5.6 數(shù)字上下文 81
5.6.1 一元數(shù)字提升 82
5.6.2 二元數(shù)字提升 83
第6章 名字 84
6.1 聲明 84
6.2 名字與標(biāo)識(shí)符 89
6.3 聲明的作用域 91
6.4 遮蔽和遮掩 93
6.4.1 遮蔽 94
6.4.2 遮掩 96
6.5 確定名字的含義 97
6.5.1 根據(jù)上下文的名字的句法分類 98
6.5.2 對(duì)上下文歧義名字的重分類 100
6.5.3 包名的含義 101
6.5.4 PackageOrTypeNames的含義 102
6.5.5 類型名的含義 102
6.5.6 表達(dá)式名的含義 103
6.5.7 方法名的含義 105
6.6 訪問控制 106
6.6.1 確定可訪問性 107
6.6.2 受保護(hù)訪問權(quán)限的細(xì)節(jié) 110
6.7 完全限定名和規(guī)范名 111
第7章 包 113
7.1 包成員 113
7.2 主機(jī)對(duì)包的支持 114
7.3 編譯單元 115
7.4 包聲明 116
7.4.1 具名包 116
7.4.2 不具名包 116
7.4.3 包的可觀察性 117
7.5 導(dǎo)入聲明 117
7.5.1 單類型導(dǎo)入聲明 118
7.5.2 按需類型導(dǎo)入聲明 119
7.5.3 單靜態(tài)導(dǎo)入聲明 120
7.5.4 按需靜態(tài)導(dǎo)入聲明 120
7.6 頂層類型聲明 121
第8章 類 123
8.1 類聲明 124
8.1.1 類修飾符 124
8.1.2 泛化類和類型參數(shù) 126
8.1.3 內(nèi)部類和包圍實(shí)例 128
8.1.4 超類和子類 130
8.1.5 超接口 132
8.1.6 類體和成員聲明 134
8.2 類成員 135
8.3 域聲明 138
8.3.1 域修飾符 141
8.3.2 域的初始化 145
8.3.3 在域初始化過程中的向前引用 146
8.4 方法聲明 148
8.4.1 形參 149
8.4.2 方法簽名 152
8.4.3 方法修飾符 152
8.4.4 泛化方法 156
8.4.5 方法的結(jié)果 157
8.4.6 方法拋出異常 157
8.4.7 方法體 158
8.4.8 繼承、覆蓋和隱藏 159
8.4.9 重載 166
8.5 成員類型聲明 168
8.5.1 靜態(tài)成員類型聲明 169
8.6 實(shí)例初始化器 169
8.7 靜態(tài)初始化器 169
8.8 構(gòu)造器聲明 170
8.8.1 形參 170
8.8.2 構(gòu)造器簽名 171
8.8.3 構(gòu)造器修飾符 171
8.8.4 泛化構(gòu)造器 172
8.8.5 構(gòu)造器拋出異常 172
8.8.6 構(gòu)造器的類型 172
8.8.7 構(gòu)造器體 172
8.8.8 構(gòu)造器重載 176
8.8.9 缺省構(gòu)造器 176
8.8.10 阻止類的實(shí)例化 177
8.9 枚舉類型 177
8.9.1 枚舉常量 178
8.9.2 枚舉體聲明 178
8.9.3 枚舉成員 180
第9章 接口 184
9.1 接口聲明 184
9.1.1?接口修飾符 185
9.1.2 泛化接口和類型參數(shù) 185
9.1.3 超接口和子接口 186
9.1.4 接口體和成員聲明 187
9.2 接口成員 187
9.3 域(常量)聲明 187
9.3.1 接口中域的初始化 189
9.4 方法聲明 189
9.4.1 繼承和覆蓋 190
9.4.2 重載 193
9.4.3 接口方法體 193
9.5 成員類型聲明 193
9.6 注解類型 194
9.6.1 注解類型元素 195
9.6.2 注解類型元素的缺省值 197
9.6.3 可重復(fù)的注解類型 198
9.6.4 預(yù)定義的注解類型 200
9.7 注解 204
9.7.1 普通注解 205
9.7.2 標(biāo)記注解 207
9.7.3 單元素注解 207
9.7.4 注解可以出現(xiàn)在何處 208
9.7.5 同種類型的多重注解 211
9.8 函數(shù)型接口 212
9.9 函數(shù)類型 214
第10章 數(shù)組 218
10.1 數(shù)組類型 218
10.2 數(shù)組變量 219
10.3 數(shù)組創(chuàng)建 220
10.4 數(shù)組訪問 220
10.5 數(shù)組存儲(chǔ)異常 220
10.6 數(shù)組初始化器 221
10.7 數(shù)組成員 222
10.8 數(shù)組的Class對(duì)象 223
10.9 字符數(shù)組不是String 224
第11章 異常 225
11.1 異常的種類和成因 225
11.1.1 異常的種類 225
11.1.2 異常的成因 226
11.1.3 異步異常 226
11.2 異常的編譯時(shí)檢查 227
11.2.1 表達(dá)式異常分析 228
11.2.2 語(yǔ)句異常分析 228
11.2.3 異常檢查 229
11.3 異常的運(yùn)行時(shí)處理 230
第12章 執(zhí)行 233
12.1 Java虛擬機(jī)啟動(dòng) 233
12.1.1 加載Test類 233
12.1.2 鏈接Test:校驗(yàn)、準(zhǔn)備、(可選的)解析 233
12.1.3 初始化Test:執(zhí)行初始化器 234
12.1.4 調(diào)用Test.main 234
12.2 加載類和接口 235
12.2.1 加載過程 235
12.3 鏈接類和接口 236
12.3.1 二進(jìn)制表示的校驗(yàn) 236
12.3.2 類或接口類型的準(zhǔn)備 236
12.3.3 符號(hào)引用的解析 237
12.4 初始化類和接口 237
12.4.1 當(dāng)初始化發(fā)生時(shí) 238
12.4.2 詳細(xì)的初始化過程 239
12.5 創(chuàng)建新的類實(shí)例 241
12.6 類實(shí)例的終結(jié) 243
12.6.1 實(shí)現(xiàn)終結(jié) 244
12.6.2 與內(nèi)存模型的交互 245
12.7 卸載類和接口 246
12.8 程序退出 247
第13章 二進(jìn)制兼容性 248
13.1 二進(jìn)制形式 249
13.2 二進(jìn)制兼容性到底是什么 252
13.3 包的演化 252
13.4 類的演化 253
13.4.1 abstract類 253
13.4.2 final類 253
13.4.3 public類 253
13.4.4 超類和超接口 253
13.4.5 類的類型參數(shù) 254
13.4.6 類體和成員聲明 255
13.4.7 對(duì)成員和構(gòu)造器的訪問權(quán)限 256
13.4.8 域聲明 257
13.4.9 final域和static
常量變量 258
13.4.10 static域 260
13.4.11 transient域 260
13.4.12 方法和構(gòu)造器聲明 260
13.4.13 方法和構(gòu)造器的類型參數(shù) 261
13.4.14 方法和構(gòu)造器的形式參數(shù) 261
13.4.15 方法返回類型 262
13.4.16 abstract方法 262
13.4.17 final方法 262
13.4.18 native方法 263
13.4.19 static方法 263
13.4.20 synchronized方法 263
13.4.21 方法和構(gòu)造器的拋出物 263
13.4.22 方法和構(gòu)造器體 263
13.4.23 方法和構(gòu)造器的重載 264
13.4.24 方法覆蓋 264
13.4.25 靜態(tài)初始化器 264
13.4.26 枚舉的演化 265
13.5 接口的演化 265
13.5.1 public接口 265
13.5.2 超接口 265
13.5.3 接口成員 265
13.5.4 接口的類型參數(shù) 266
13.5.5 域聲明 266
13.5.6 接口方法聲明 266
13.5.7 注解類型的演化 267
第14章 塊和語(yǔ)句 268
14.1 語(yǔ)句的正常結(jié)束和猝然結(jié)束 268
14.2 塊 269
14.3 局部類聲明 269
14.4 局部變量聲明語(yǔ)句 270
14.4.1 局部變量聲明符和類型 271
14.4.2 局部變量聲明的執(zhí)行 271
14.5 語(yǔ)句 271
14.6 空語(yǔ)句 272
14.7 標(biāo)號(hào)語(yǔ)句 273
14.8 表達(dá)式語(yǔ)句 274
14.9 if語(yǔ)句 274
14.9.1 if-then語(yǔ)句 274
14.9.2 if-then-else語(yǔ)句 275
14.10 assert語(yǔ)句 275
14.11 switch語(yǔ)句 277
14.12 while語(yǔ)句 280
14.12.1 while語(yǔ)句的猝然結(jié)束 280
14.13 do語(yǔ)句 281
14.13.1 do語(yǔ)句的猝然結(jié)束 281
14.14 for語(yǔ)句 282
14.14.1 基本for語(yǔ)句 282
14.14.2 增強(qiáng)for語(yǔ)句 284
14.15 break語(yǔ)句 285
14.16 continue語(yǔ)句 287
14.17 return語(yǔ)句 288
14.18 throw語(yǔ)句 289
14.19 synchronized語(yǔ)句 290
14.20 try語(yǔ)句 291
14.20.1 try-catch的執(zhí)行 293
14.20.2 try-finally和try-catch-finally的執(zhí)行 294
14.20.3 帶資源的try 296
14.21 不可達(dá)語(yǔ)句 299
第15章 表達(dá)式 303
15.1 計(jì)算、表示和結(jié)果 303
15.2 表達(dá)式的形式 303
15.3 表達(dá)式的類型 304
15.4 FP-嚴(yán)格的表達(dá)式 304
15.5 表達(dá)式和運(yùn)行時(shí)檢查 305
15.6 計(jì)算的正常和猝然結(jié)束 306
15.7 計(jì)算順序 307
15.7.1 首先計(jì)算左操作數(shù) 307
15.7.2 在操作之前計(jì)算操作數(shù) 308
15.7.3 計(jì)算遵循括號(hào)和優(yōu)先級(jí) 309
15.7.4 引元列表是自左向右計(jì)算的 310
15.7.5 其他表達(dá)式的計(jì)算順序 310
15.8 基本表達(dá)式 311
15.8.1 詞法上的字面常量 312
15.8.2 類字面常量 312
15.8.3 this 313
15.8.4 限定的this 313
15.8.5 帶括號(hào)的表達(dá)式 314
15.9 類實(shí)例創(chuàng)建表達(dá)式 314
15.9.1 確定要實(shí)例化的類 315
15.9.2 確定包圍實(shí)例 316
15.9.3 選擇構(gòu)造器及其引元 317
15.9.4 類實(shí)例創(chuàng)建表達(dá)式的運(yùn)行時(shí)計(jì)算 319
15.9.5 匿名類聲明 320
15.10 數(shù)組創(chuàng)建和訪問表達(dá)式 321
15.10.1 數(shù)組創(chuàng)建表達(dá)式 321
15.10.2 數(shù)組創(chuàng)建表達(dá)式的運(yùn)行時(shí)執(zhí)行 322
15.10.3 數(shù)組訪問表達(dá)式 324
15.10.4 數(shù)組訪問表達(dá)式的運(yùn)行時(shí)計(jì)算 324
15.11 域訪問表達(dá)式 326
15.11.1 使用基本表達(dá)式訪問域 326
15.11.2 使用super訪問超類成員 328
15.12 方法調(diào)用表達(dá)式 329
15.12.1 編譯時(shí)的步驟1:確定要搜索的類或接口 330
15.12.2 編譯時(shí)的步驟2:確定方法簽名 332
15.12.3 編譯時(shí)的步驟3:選中的方法是否合適 342
15.12.4 方法調(diào)用的運(yùn)行時(shí)計(jì)算 343
15.13 方法引用表達(dá)式 350
15.13.1 方法引用的編譯時(shí)聲明 352
15.13.2 方法引用的類型 355
15.13.3 方法引用的運(yùn)行時(shí)計(jì)算 356
15.14 后綴表達(dá)式 359
15.14.1 表達(dá)式名字 359
15.14.2 后綴遞增操作符++ 359
15.14.3 后綴遞減操作符-- 359
15.15 一元操作符 360
15.15.1 前綴遞增操作符++ 361
15.15.2 前綴遞減操作符-- 361
15.15.3 一元加號(hào)操作符+ 362
15.15.4 一元減號(hào)操作符- 362
15.15.5 按位取反操作符~ 362
15.15.6 邏輯取反操作符! 362
15.16 強(qiáng)制類型轉(zhuǎn)換表達(dá)式 363
15.17 乘除操作符 364
15.17.1 乘法操作符* 364
15.17.2 除法操作符/ 365
15.17.3 取余操作符% 366
15.18 加減操作符 367
15.18.1 字符串連接操作符+ 368
15.18.2 用于數(shù)字類型的加減操作符 (+和-) 369
15.19 移位操作符 371
15.20 關(guān)系操作符 371
15.20.1 數(shù)字比較操作符<、<=、>和>= 372
15.20.2 類型比較操作符instanceof 372
15.21 判等操作符 373
15.21.1 數(shù)字判等操作符==和!= 373
15.21.2 布爾判等操作符==和!= 374
15.21.3 引用判等操作符==和!= 374
15.22 位操作符與邏輯操作符 375
15.22.1 整數(shù)位操作符&、^和| 375
15.22.2 布爾邏輯操作符&、^和| 376
15.23 條件與操作符&& 376
15.24 條件或操作符|| 376
15.25 條件操作符? : 377
15.25.1 布爾條件表達(dá)式 381
15.25.2 數(shù)字型條件表達(dá)式 381
15.25.3 引用條件表達(dá)式 382
15.26 賦值操作符 383
15.26.1 簡(jiǎn)單賦值操作符= 383
15.26.2 復(fù)合賦值操作符 387
15.27 lambda表達(dá)式 391
15.27.1 lambda參數(shù) 393
15.27.2 lambda體 394
15.27.3 lambda表達(dá)式的類型 397
15.27.4 lambda表達(dá)式的運(yùn)行時(shí)計(jì)算 398
15.28 常量表達(dá)式 399
第16章 明確賦值 400
16.1 明確賦值和表達(dá)式 404
16.1.1 布爾常量表達(dá)式 404
16.1.2 條件與操作符&& 404
16.1.3 條件或操作符|| 404
16.1.4 邏輯取反操作符! 405
16.1.5 條件操作符? : 405
16.1.6 其他boolean類型的表達(dá)式 405
16.1.7 賦值表達(dá)式 406
16.1.8 操作符++和-- 406
16.1.9 其他表達(dá)式 406
16.2 明確賦值與語(yǔ)句 407
16.2.1 空語(yǔ)句 407
16.2.2 塊 407
16.2.3 局部類聲明語(yǔ)句 408
16.2.4 局部變量聲明語(yǔ)句 408
16.2.5 標(biāo)號(hào)語(yǔ)句 409
16.2.6 表達(dá)式語(yǔ)句 409
16.2.7 if語(yǔ)句 409
16.2.8 assert語(yǔ)句 409
16.2.9 switch語(yǔ)句 410
16.2.10 while語(yǔ)句 410
16.2.11 do語(yǔ)句 410
16.2.12 for語(yǔ)句 411
16.2.13 break、continue、return和throw語(yǔ)句 412
16.2.14 synchronized語(yǔ)句 412
16.2.15 try語(yǔ)句 412
16.3 明確賦值與參數(shù) 413
16.4 明確賦值與數(shù)組初始化器 413
16.5 明確賦值與枚舉常量 413
16.6 明確賦值與匿名類 414
16.7 明確賦值與成員類型 414
16.8 明確賦值與靜態(tài)初始化器 414
16.9 明確賦值、構(gòu)造器和實(shí)例初始化器 415
第17章 線程與鎖 416
17.1 同步 416
17.2 等待集和通知 417
17.2.1 等待 417
17.2.2 通知 418
17.2.3 中斷 418
17.2.4 等待、通知和中斷的交互 418
17.3 睡眠和讓步 419
17.4 內(nèi)存模型 419
17.4.1 共享變量 421
17.4.2 動(dòng)作 421
17.4.3 程序和程序順序 422
17.4.4 同步順序 422
17.4.5 “之前發(fā)生”順序 423
17.4.6 執(zhí)行 425
17.4.7 良構(gòu)執(zhí)行 425
17.4.8 執(zhí)行和因果關(guān)系要求 426
17.4.9 可觀察的行為和不終止的執(zhí)行 428
17.5 final域的語(yǔ)義 429
17.5.1 final域的語(yǔ)義 430
17.5.2 在構(gòu)造階段讀final域 430
17.5.3 對(duì)final域的后續(xù)修改 431
17.5.4 寫受保護(hù)的域 432
17.6 字撕裂 432
17.7 double和long的非原子化處理 433
第18章 類型推斷 434
18.1 概念與表示法 435
18.1.1 推斷變量 435
18.1.2 約束公式 435
18.1.3 邊界 435
18.2 歸納 436
18.2.1 表達(dá)式可兼容性約束 437
18.2.2 類型可兼容性約束 440
18.2.3 子類型化約束 440
18.2.4 類型相等性約束 442
18.2.5 受檢異常約束 442
18.3 合并 443
18.3.1 互補(bǔ)的邊界對(duì) 444
18.3.2 涉及捕獲轉(zhuǎn)換的邊界 444
18.4 解析 445
18.5 推斷的使用 446
18.5.1 調(diào)用可應(yīng)用性的推斷 447
18.5.2 調(diào)用類型的推斷 448
18.5.3 函數(shù)型接口的參數(shù)化版本推斷 451
18.5.4 更具體方法的推斷 452
第19章 語(yǔ)法 454
索引 470