【前言】
這是一本Java案頭參考書,適合放在鍵盤旁,編程時隨時翻閱。本書第一部分快速準(zhǔn)確地介紹了Java編程語言和Java平臺的核心運(yùn)行時概念。第二部分通過重要的核心API示例來解釋關(guān)鍵概念。本書雖然涵蓋Java 11,但考慮到有些行業(yè)還沒有開始使用這個版本,所以只要有需要,我們就會特別注明Java 8、Java 9或者Java 10引入的特性。本書全面使用Java 11句法,包括var關(guān)鍵字和lambda表達(dá)式。
【第7版的變化】
本書第6版涵蓋了Java 8,而第7版囊括了Java 11。然而,隨著Java 9的出現(xiàn),Java的發(fā)布過程發(fā)生了很大的變化,因此本書英文版在Java 9問世一年后才出版。Java 11也是自Java 8以來Java第一個長期支持(LTS)的版本,因此許多行業(yè)看起來會直接從Java 8跳到Java 11。
在第7版中,我們試圖更新技術(shù)指南的概念,F(xiàn)代Java開發(fā)人員需要知道的不僅僅是句法和API。隨著Java環(huán)境愈加成熟,并發(fā)、面向?qū)ο笤O(shè)計、內(nèi)存和Java類型系統(tǒng)等內(nèi)容都變得越來越重要,甚至在主流開發(fā)人員中也是如此。
由于大多數(shù)Java開發(fā)者可能只對Java的最新版本感興趣,所以在第7版中我們通常只在Java 8及其之后的新特性出現(xiàn)時才加以強(qiáng)調(diào)。
Java模塊系統(tǒng)(隨Java 9發(fā)布)至少對部分開發(fā)者來說可能還是全新的,它代表了一個重大的變化。
【本書內(nèi)容】
第一部分(前6章)介紹了Java語言和Java平臺,這些內(nèi)容一定要仔細(xì)閱讀。本書偏向Oracle/OpenJDK(Open Java Development Kit)對Java的實(shí)現(xiàn),但又不局限于此,使用其他Java環(huán)境的開發(fā)者仍然能看到很多對其他環(huán)境的介紹。第一部分包括如下內(nèi)容:
第1章
這一章概述Java語言和Java平臺,說明Java的重要特性和優(yōu)勢,包括Java程序的生命周期。最后會介紹Java的安全性,并回應(yīng)一些針對Java的批評。
第2章
這一章詳細(xì)介紹Java編程語言,包括Java 8的改動。這一章內(nèi)容很多,也很詳細(xì),不過閱讀前不需要讀者有大量編程經(jīng)驗。有經(jīng)驗的Java程序員可以把這一章當(dāng)成語言參考。有大量C和C++開發(fā)經(jīng)驗的程序員閱讀這一章之后,也能快速了解Java的句法。只有少量編程經(jīng)驗的初學(xué)者經(jīng)過認(rèn)真閱讀,應(yīng)該也能學(xué)會Java編程,不過最好再結(jié)合其他資料一起學(xué)習(xí)(例如Bert Bates和Kathy Sierra合著的Head First Java,O’Reilly出版)。
第3章
這一章介紹如何利用第2章介紹的Java基本句法,使用Java中的類和對象編寫簡單的面向?qū)ο蟪绦。這一章不要求讀者有面向?qū)ο缶幊探?jīng)驗。新手程序員可以將其當(dāng)成教程,有經(jīng)驗的Java程序員則可以將其當(dāng)作參考。
第4章
這一章以前面對Java面向?qū)ο缶幊痰恼f明為基礎(chǔ),介紹Java類型系統(tǒng)的其他方面,例如泛型、枚舉類型和注解。全面了解類型系統(tǒng)之后,我們就可以討論Java 8最大的變化—lambda表達(dá)式了。
第5章
這一章概述設(shè)計可靠的面向?qū)ο蟪绦蛩璧囊恍┗炯夹g(shù),還會簡單介紹一些設(shè)計模式及其在軟件工程中的用處。
第6章
這一章討論Java虛擬機(jī)代替程序員管理內(nèi)存的方式,以及內(nèi)存、可見性與Java并發(fā)編程和線程之間錯綜復(fù)雜的關(guān)系。
前6章主要介紹如何使用Java語言,也介紹了Java平臺最重要的一些概念。本書第二部分則告訴讀者如何在Java環(huán)境中完成實(shí)際的編程任務(wù)。這部分包含大量示例,以攻略方式撰寫。第二部分包括如下內(nèi)容:
第7章
這一章介紹Java編程中重要且運(yùn)用廣泛的重要約定,還會介紹如何使用特定格式的文檔注釋來讓Java代碼進(jìn)行自我文檔化。
第8章
這一章介紹Java的標(biāo)準(zhǔn)集合庫,包含幾乎對每個Java程序都很重要的數(shù)據(jù)結(jié)構(gòu),例如List、Map和Set。此外,還會詳細(xì)介紹新引入的Stream抽象,以及l(fā)ambda表達(dá)式和集合之間的關(guān)系。
第9章
這一章說明如何有效地使用Java處理常見的數(shù)據(jù)類型,例如文本、數(shù)字和時間相關(guān)的信息(日期和時間)。
第10章
這一章涵蓋幾種不同的文件訪問方式,包括Java舊版本中的經(jīng)典方式和現(xiàn)代的異步方式。這一章最后還會簡單介紹如何使用Java平臺的核心API進(jìn)行網(wǎng)絡(luò)連接。
第11章
這一章介紹Java隱含的元編程功能—首先介紹Java類型元數(shù)據(jù)的概念,然后介紹類加載,以及Java的安全模型和動態(tài)類型加載之間的關(guān)系。這一章還會介紹幾個類加載程序和相對較新的方法句柄特性。
第12章
這一章介紹Java平臺模塊化(JPMS),它是Java 9引入的主要特性,還將介紹它帶來的廣泛變化。
第13章
Oracle提供的JDK(和OpenJDK)包含很多有用的Java開發(fā)工具,其中最重要的是Java解釋器和編譯器。這一章會介紹這些工具,以及jshell交互環(huán)境,還有使用模塊化Java的新工具。
附錄A
本附錄介紹了Nashorn,它是一個運(yùn)行在Java虛擬機(jī)上的JavaScript實(shí)現(xiàn)。Nashorn隨Java 8發(fā)布,并提供了其他JavaScript實(shí)現(xiàn)的替代方案。
【第一部分 Java介紹9】
第1章 Java環(huán)境介紹11
1.1 Java語言、JVM和生態(tài)系統(tǒng)11
1.2 Java和JVM簡史16
1.3 Java程序的生命周期17
1.4 Java的安全性19
1.5 Java和其他語言的比較20
1.6 回應(yīng)對Java的一些批評21
第2章 Java的基本句法24
2.1 Java程序概覽25
2.2 詞法結(jié)構(gòu)25
2.3 基本數(shù)據(jù)類型29
2.4 表達(dá)式和運(yùn)算符36
2.5 語句52
2.6 方法69
2.7 類和對象75
2.8 數(shù)組79
2.9 引用類型86
2.10 包和Java命名空間90
2.11 Java源文件的結(jié)構(gòu)94
2.12 定義并運(yùn)行Java程序95
2.13 小結(jié)96
第3章 Java面向?qū)ο缶幊?7
3.1 類簡介97
3.2 字段和方法99
3.3 創(chuàng)建和初始化對象105
3.4 子類與繼承109
3.5 數(shù)據(jù)隱藏和封裝120
3.6 抽象類和方法127
3.7 修飾符小結(jié)131
第4章 Java類型系統(tǒng)133
4.1 接口133
4.2 Java泛型141
4.3 枚舉和注解153
4.4 lambda表達(dá)式157
4.5 嵌套類型164
4.6 無法表示的類型和var174
4.7 小結(jié)175
第5章 Java的面向?qū)ο笤O(shè)計177
5.1 Java的值177
5.2 java.lang.Object類的重要方法178
5.3 面向?qū)ο笤O(shè)計概要182
5.4 帶有l(wèi)ambda表達(dá)式的面向?qū)ο笤O(shè)計192
5.5 異常和異常處理195
5.6 Java編程的安全性197
第6章 Java實(shí)現(xiàn)內(nèi)存管理和并發(fā)編程的方式199
6.1 Java內(nèi)存管理的基本概念199
6.2 JVM優(yōu)化垃圾回收的方式203
6.3 HotSpot堆205
6.4 終結(jié)機(jī)制208
6.5 Java對并發(fā)編程的支持211
6.6 使用線程221
6.7 小結(jié)223
【第二部分 使用Java平臺225】
第7章 編程和文檔約定227
7.1 命名和大小寫約定227
7.2 實(shí)用的命名方式229
7.3 Java文檔注釋230
7.4 doclet238
7.5 可移植程序的約定239
第8章 使用Java集合242
8.1 集合API簡介242
8.2 Java流和lambda表達(dá)式261
8.3 小結(jié)268
第9章 處理常見的數(shù)據(jù)格式269
9.1 文本269
9.2 數(shù)字和數(shù)學(xué)運(yùn)算276
9.3 在Java 8中處理日期和時間281
9.4 小結(jié)287
第10章 文件處理和I/O288
10.1 經(jīng)典的Java I/O288
10.2 現(xiàn)代的Java I/O294
10.3 NIO中的通道和緩沖區(qū)297
10.4 異步I/O300
10.5 網(wǎng)絡(luò)303
第11章 類加載、反射和方法句柄309
11.1 類文件、類對象和元數(shù)據(jù)309
11.2 類加載的各個階段311
11.3 安全的編程和類加載314
11.4 應(yīng)用類加載知識315
11.5 反射318
11.6 方法句柄323
第12章 Java平臺模塊化327
12.1 為什么要模塊化328
12.2 自行開發(fā)模塊331
12.3 模塊化的問題340
12.4 小結(jié)342
第13章 平臺工具344
13.1 命令行工具344
13.2 介紹JShell360
13.3 小結(jié)363
附錄A 附加工具365
作者簡介384
封面簡介384