【前言】
這是一本Java案頭參考書,適合放在鍵盤旁,編程時(shí)隨時(shí)翻閱。本書第一部分快速準(zhǔn)確地介紹了Java編程語(yǔ)言和Java平臺(tái)的核心運(yùn)行時(shí)概念。第二部分通過重要的核心API示例來(lái)解釋關(guān)鍵概念。本書雖然涵蓋Java 11,但考慮到有些行業(yè)還沒有開始使用這個(gè)版本,所以只要有需要,我們就會(huì)特別注明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以來(lái)Java第一個(gè)長(zhǎng)期支持(LTS)的版本,因此許多行業(yè)看起來(lái)會(huì)直接從Java 8跳到Java 11。
在第7版中,我們?cè)噲D更新技術(shù)指南的概念,F(xiàn)代Java開發(fā)人員需要知道的不僅僅是句法和API。隨著Java環(huán)境愈加成熟,并發(fā)、面向?qū)ο笤O(shè)計(jì)、內(nèi)存和Java類型系統(tǒng)等內(nèi)容都變得越來(lái)越重要,甚至在主流開發(fā)人員中也是如此。
由于大多數(shù)Java開發(fā)者可能只對(duì)Java的最新版本感興趣,所以在第7版中我們通常只在Java 8及其之后的新特性出現(xiàn)時(shí)才加以強(qiáng)調(diào)。
Java模塊系統(tǒng)(隨Java 9發(fā)布)至少對(duì)部分開發(fā)者來(lái)說(shuō)可能還是全新的,它代表了一個(gè)重大的變化。
【本書內(nèi)容】
第一部分(前6章)介紹了Java語(yǔ)言和Java平臺(tái),這些內(nèi)容一定要仔細(xì)閱讀。本書偏向Oracle/OpenJDK(Open Java Development Kit)對(duì)Java的實(shí)現(xiàn),但又不局限于此,使用其他Java環(huán)境的開發(fā)者仍然能看到很多對(duì)其他環(huán)境的介紹。第一部分包括如下內(nèi)容:
第1章
這一章概述Java語(yǔ)言和Java平臺(tái),說(shuō)明Java的重要特性和優(yōu)勢(shì),包括Java程序的生命周期。最后會(huì)介紹Java的安全性,并回應(yīng)一些針對(duì)Java的批評(píng)。
第2章
這一章詳細(xì)介紹Java編程語(yǔ)言,包括Java 8的改動(dòng)。這一章內(nèi)容很多,也很詳細(xì),不過閱讀前不需要讀者有大量編程經(jīng)驗(yàn)。有經(jīng)驗(yàn)的Java程序員可以把這一章當(dāng)成語(yǔ)言參考。有大量C和C++開發(fā)經(jīng)驗(yàn)的程序員閱讀這一章之后,也能快速了解Java的句法。只有少量編程經(jīng)驗(yàn)的初學(xué)者經(jīng)過認(rèn)真閱讀,應(yīng)該也能學(xué)會(huì)Java編程,不過最好再結(jié)合其他資料一起學(xué)習(xí)(例如Bert Bates和Kathy Sierra合著的Head First Java,O’Reilly出版)。
第3章
這一章介紹如何利用第2章介紹的Java基本句法,使用Java中的類和對(duì)象編寫簡(jiǎn)單的面向?qū)ο蟪绦。這一章不要求讀者有面向?qū)ο缶幊探?jīng)驗(yàn)。新手程序員可以將其當(dāng)成教程,有經(jīng)驗(yàn)的Java程序員則可以將其當(dāng)作參考。
第4章
這一章以前面對(duì)Java面向?qū)ο缶幊痰恼f(shuō)明為基礎(chǔ),介紹Java類型系統(tǒng)的其他方面,例如泛型、枚舉類型和注解。全面了解類型系統(tǒng)之后,我們就可以討論Java 8最大的變化—lambda表達(dá)式了。
第5章
這一章概述設(shè)計(jì)可靠的面向?qū)ο蟪绦蛩璧囊恍┗炯夹g(shù),還會(huì)簡(jiǎn)單介紹一些設(shè)計(jì)模式及其在軟件工程中的用處。
第6章
這一章討論Java虛擬機(jī)代替程序員管理內(nèi)存的方式,以及內(nèi)存、可見性與Java并發(fā)編程和線程之間錯(cuò)綜復(fù)雜的關(guān)系。
前6章主要介紹如何使用Java語(yǔ)言,也介紹了Java平臺(tái)最重要的一些概念。本書第二部分則告訴讀者如何在Java環(huán)境中完成實(shí)際的編程任務(wù)。這部分包含大量示例,以攻略方式撰寫。第二部分包括如下內(nèi)容:
第7章
這一章介紹Java編程中重要且運(yùn)用廣泛的重要約定,還會(huì)介紹如何使用特定格式的文檔注釋來(lái)讓Java代碼進(jìn)行自我文檔化。
第8章
這一章介紹Java的標(biāo)準(zhǔn)集合庫(kù),包含幾乎對(duì)每個(gè)Java程序都很重要的數(shù)據(jù)結(jié)構(gòu),例如List、Map和Set。此外,還會(huì)詳細(xì)介紹新引入的Stream抽象,以及l(fā)ambda表達(dá)式和集合之間的關(guān)系。
第9章
這一章說(shuō)明如何有效地使用Java處理常見的數(shù)據(jù)類型,例如文本、數(shù)字和時(shí)間相關(guān)的信息(日期和時(shí)間)。
第10章
這一章涵蓋幾種不同的文件訪問方式,包括Java舊版本中的經(jīng)典方式和現(xiàn)代的異步方式。這一章最后還會(huì)簡(jiǎn)單介紹如何使用Java平臺(tái)的核心API進(jìn)行網(wǎng)絡(luò)連接。
第11章
這一章介紹Java隱含的元編程功能—首先介紹Java類型元數(shù)據(jù)的概念,然后介紹類加載,以及Java的安全模型和動(dòng)態(tài)類型加載之間的關(guān)系。這一章還會(huì)介紹幾個(gè)類加載程序和相對(duì)較新的方法句柄特性。
第12章
這一章介紹Java平臺(tái)模塊化(JPMS),它是Java 9引入的主要特性,還將介紹它帶來(lái)的廣泛變化。
第13章
Oracle提供的JDK(和OpenJDK)包含很多有用的Java開發(fā)工具,其中最重要的是Java解釋器和編譯器。這一章會(huì)介紹這些工具,以及jshell交互環(huán)境,還有使用模塊化Java的新工具。
附錄A
本附錄介紹了Nashorn,它是一個(gè)運(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語(yǔ)言、JVM和生態(tài)系統(tǒng)11
1.2 Java和JVM簡(jiǎn)史16
1.3 Java程序的生命周期17
1.4 Java的安全性19
1.5 Java和其他語(yǔ)言的比較20
1.6 回應(yīng)對(duì)Java的一些批評(píng)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 語(yǔ)句52
2.6 方法69
2.7 類和對(duì)象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 類簡(jiǎn)介97
3.2 字段和方法99
3.3 創(chuàng)建和初始化對(duì)象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 無(wú)法表示的類型和var174
4.7 小結(jié)175
第5章 Java的面向?qū)ο笤O(shè)計(jì)177
5.1 Java的值177
5.2 java.lang.Object類的重要方法178
5.3 面向?qū)ο笤O(shè)計(jì)概要182
5.4 帶有l(wèi)ambda表達(dá)式的面向?qū)ο笤O(shè)計(jì)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對(duì)并發(fā)編程的支持211
6.6 使用線程221
6.7 小結(jié)223
【第二部分 使用Java平臺(tái)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簡(jiǎn)介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中處理日期和時(shí)間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 類文件、類對(duì)象和元數(shù)據(jù)309
11.2 類加載的各個(gè)階段311
11.3 安全的編程和類加載314
11.4 應(yīng)用類加載知識(shí)315
11.5 反射318
11.6 方法句柄323
第12章 Java平臺(tái)模塊化327
12.1 為什么要模塊化328
12.2 自行開發(fā)模塊331
12.3 模塊化的問題340
12.4 小結(jié)342
第13章 平臺(tái)工具344
13.1 命令行工具344
13.2 介紹JShell360
13.3 小結(jié)363
附錄A 附加工具365
作者簡(jiǎn)介384
封面簡(jiǎn)介384