本書(shū)共分為兩部分:
第1部分介紹了Java開(kāi)發(fā)環(huán)境、基本句法、面向?qū)ο缶幊、?lèi)型系統(tǒng)、內(nèi)存管理以及并發(fā)機(jī)制;
第2部分介紹了Java原生的核心庫(kù)以及一些中高級(jí)開(kāi)發(fā)者常用的技術(shù),包括文檔約定、集合類(lèi)、數(shù)據(jù)格式、文件和I/O操作、類(lèi)加載、反射、模塊化以及平臺(tái)工具。
本書(shū)既適合新手Java程序員入門(mén),也適合有多年Java開(kāi)發(fā)經(jīng)驗(yàn)的工程師閱讀。
適讀人群 :Java程序員及相關(guān)技術(shù)人員 本書(shū)不僅可以幫助有經(jīng)驗(yàn)的Java程序員充分掌握J(rèn)ava 9到Java 11,也為新的開(kāi)發(fā)者提供了學(xué)習(xí)的路徑。書(shū)中用大量示例演示了如何充分利用現(xiàn)代的Java API和開(kāi)發(fā)的最佳實(shí)踐。本版徹底修訂了關(guān)于Java平臺(tái)模塊系統(tǒng)的內(nèi)容。
全書(shū)分為兩部分:第一部分對(duì)Java編程語(yǔ)言和Java平臺(tái)的核心運(yùn)行時(shí)方面進(jìn)行了快速、清晰的介紹,第二部分介紹了Java發(fā)行版附帶的新工具。
通過(guò)學(xué)習(xí)本書(shū),你可以:
■ 快速了解語(yǔ)言細(xì)節(jié)的新進(jìn)展,包括Java 9到Java 11的更改。
■ 使用Java基本句法學(xué)習(xí)面向?qū)ο缶幊獭?br />■ 探索泛型、枚舉、注解及l(fā)ambda表達(dá)式。
■ 理解面向?qū)ο蟪绦蛟O(shè)計(jì)的基礎(chǔ)技術(shù)。
■ 詳解并發(fā)與內(nèi)存管理,以及它們的緊密關(guān)聯(lián)。
■ 使用Java集合處理常見(jiàn)的數(shù)據(jù)格式。
■ 使用JShell探究在新的交互式環(huán)境中的Java編程。
■ 熟練使用OpenJDK中的開(kāi)發(fā)工具。
【前言】
這是一本Java案頭參考書(shū),適合放在鍵盤(pán)旁,編程時(shí)隨時(shí)翻閱。本書(shū)第一部分快速準(zhǔn)確地介紹了Java編程語(yǔ)言和Java平臺(tái)的核心運(yùn)行時(shí)概念。第二部分通過(guò)重要的核心API示例來(lái)解釋關(guān)鍵概念。本書(shū)雖然涵蓋Java 11,但考慮到有些行業(yè)還沒(méi)有開(kāi)始使用這個(gè)版本,所以只要有需要,我們就會(huì)特別注明Java 8、Java 9或者Java 10引入的特性。本書(shū)全面使用Java 11句法,包括var關(guān)鍵字和lambda表達(dá)式。
【第7版的變化】
本書(shū)第6版涵蓋了Java 8,而第7版囊括了Java 11。然而,隨著Java 9的出現(xiàn),Java的發(fā)布過(guò)程發(fā)生了很大的變化,因此本書(shū)英文版在Java 9問(wèn)世一年后才出版。Java 11也是自Java 8以來(lái)Java第一個(gè)長(zhǎng)期支持(LTS)的版本,因此許多行業(yè)看起來(lái)會(huì)直接從Java 8跳到Java 11。
在第7版中,我們?cè)噲D更新技術(shù)指南的概念。現(xiàn)代Java開(kāi)發(fā)人員需要知道的不僅僅是句法和API。隨著Java環(huán)境愈加成熟,并發(fā)、面向?qū)ο笤O(shè)計(jì)、內(nèi)存和Java類(lèi)型系統(tǒng)等內(nèi)容都變得越來(lái)越重要,甚至在主流開(kāi)發(fā)人員中也是如此。
由于大多數(shù)Java開(kāi)發(fā)者可能只對(duì)Java的最新版本感興趣,所以在第7版中我們通常只在Java 8及其之后的新特性出現(xiàn)時(shí)才加以強(qiáng)調(diào)。
Java模塊系統(tǒng)(隨Java 9發(fā)布)至少對(duì)部分開(kāi)發(fā)者來(lái)說(shuō)可能還是全新的,它代表了一個(gè)重大的變化。
【本書(shū)內(nèi)容】
第一部分(前6章)介紹了Java語(yǔ)言和Java平臺(tái),這些內(nèi)容一定要仔細(xì)閱讀。本書(shū)偏向Oracle/OpenJDK(Open Java Development Kit)對(duì)Java的實(shí)現(xiàn),但又不局限于此,使用其他Java環(huán)境的開(kāi)發(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ì),不過(guò)閱讀前不需要讀者有大量編程經(jīng)驗(yàn)。有經(jīng)驗(yàn)的Java程序員可以把這一章當(dāng)成語(yǔ)言參考。有大量C和C++開(kāi)發(fā)經(jīng)驗(yàn)的程序員閱讀這一章之后,也能快速了解Java的句法。只有少量編程經(jīng)驗(yàn)的初學(xué)者經(jīng)過(guò)認(rèn)真閱讀,應(yīng)該也能學(xué)會(huì)Java編程,不過(guò)最好再結(jié)合其他資料一起學(xué)習(xí)(例如Bert Bates和Kathy Sierra合著的Head First Java,O’Reilly出版)。
第3章
這一章介紹如何利用第2章介紹的Java基本句法,使用Java中的類(lèi)和對(duì)象編寫(xiě)簡(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類(lèi)型系統(tǒng)的其他方面,例如泛型、枚舉類(lèi)型和注解。全面了解類(lèi)型系統(tǒng)之后,我們就可以討論Java 8最大的變化—lambda表達(dá)式了。
第5章
這一章概述設(shè)計(jì)可靠的面向?qū)ο蟪绦蛩璧囊恍┗炯夹g(shù),還會(huì)簡(jiǎn)單介紹一些設(shè)計(jì)模式及其在軟件工程中的用處。
第6章
這一章討論Java虛擬機(jī)代替程序員管理內(nèi)存的方式,以及內(nèi)存、可見(jiàn)性與Java并發(fā)編程和線程之間錯(cuò)綜復(fù)雜的關(guān)系。
前6章主要介紹如何使用Java語(yǔ)言,也介紹了Java平臺(tái)最重要的一些概念。本書(shū)第二部分則告訴讀者如何在Java環(huán)境中完成實(shí)際的編程任務(wù)。這部分包含大量示例,以攻略方式撰寫(xiě)。第二部分包括如下內(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處理常見(jiàn)的數(shù)據(jù)類(lèi)型,例如文本、數(shù)字和時(shí)間相關(guān)的信息(日期和時(shí)間)。
第10章
這一章涵蓋幾種不同的文件訪問(wèn)方式,包括Java舊版本中的經(jīng)典方式和現(xiàn)代的異步方式。這一章最后還會(huì)簡(jiǎn)單介紹如何使用Java平臺(tái)的核心API進(jìn)行網(wǎng)絡(luò)連接。
第11章
這一章介紹Java隱含的元編程功能—首先介紹Java類(lèi)型元數(shù)據(jù)的概念,然后介紹類(lèi)加載,以及Java的安全模型和動(dòng)態(tài)類(lèi)型加載之間的關(guān)系。這一章還會(huì)介紹幾個(gè)類(lèi)加載程序和相對(duì)較新的方法句柄特性。
第12章
這一章介紹Java平臺(tái)模塊化(JPMS),它是Java 9引入的主要特性,還將介紹它帶來(lái)的廣泛變化。
第13章
Oracle提供的JDK(和OpenJDK)包含很多有用的Java開(kāi)發(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)的替代方案。
本杰明-J-埃文斯(Benjamin J. Evans)是一位企業(yè)家、顧問(wèn),也是一位教育家。他是jClarity的聯(lián)合創(chuàng)始人,jClarity是一家專注于軟件性能工具的初創(chuàng)公司。他著有多本書(shū)籍,包括Optimizing Java,還獲得過(guò)Java Champion和JavaOne Rockstar獎(jiǎng),并且經(jīng)常發(fā)表性能、體系結(jié)構(gòu)和并發(fā)等主題的演講。
大衛(wèi)-弗拉納根(David Flanagan)是Mozilla的軟件工程師,為O'Reilly撰寫(xiě)了若干著作,包括《JavaScript權(quán)威指南》《Ruby編程語(yǔ)言》,以及本版的先前版本。
【第一部分 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ù)類(lèi)型29
2.4 表達(dá)式和運(yùn)算符36
2.5 語(yǔ)句52
2.6 方法69
2.7 類(lèi)和對(duì)象75
2.8 數(shù)組79
2.9 引用類(lèi)型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 類(lèi)簡(jiǎn)介97
3.2 字段和方法99
3.3 創(chuàng)建和初始化對(duì)象105
3.4 子類(lèi)與繼承109
3.5 數(shù)據(jù)隱藏和封裝120
3.6 抽象類(lèi)和方法127
3.7 修飾符小結(jié)131
第4章 Java類(lèi)型系統(tǒng)133
4.1 接口133
4.2 Java泛型141
4.3 枚舉和注解153
4.4 lambda表達(dá)式157
4.5 嵌套類(lèi)型164
4.6 無(wú)法表示的類(lèi)型和var174
4.7 小結(jié)175
第5章 Java的面向?qū)ο笤O(shè)計(jì)177
5.1 Java的值177
5.2 java.lang.Object類(lèi)的重要方法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 命名和大小寫(xiě)約定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章 處理常見(jiàn)的數(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章 類(lèi)加載、反射和方法句柄309
11.1 類(lèi)文件、類(lèi)對(duì)象和元數(shù)據(jù)309
11.2 類(lèi)加載的各個(gè)階段311
11.3 安全的編程和類(lèi)加載314
11.4 應(yīng)用類(lèi)加載知識(shí)315
11.5 反射318
11.6 方法句柄323
第12章 Java平臺(tái)模塊化327
12.1 為什么要模塊化328
12.2 自行開(kāi)發(fā)模塊331
12.3 模塊化的問(wèn)題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