本書由擁有20多年教學與研究經(jīng)驗的資深Java技術專家撰寫(獲Jolt大獎),是程序員的優(yōu)選Java指南。本版針對Java SE 9、10和 11全面更新。
全書共12章。
第1章概述Java語言的特色功能;
第2章詳細論述如何下載和安裝JDK以及本書的程序示例;
第3章開始討論Java 語言,包括變量、循環(huán)和簡單的函數(shù);
第4章介紹面向?qū)ο髢纱蠡袠O要的一個概念封裝,以及Java語言實現(xiàn)封裝的機制,即類與方法;
第5章介紹面向?qū)ο蟮牧硪粋重要概念繼承,繼承使程序員可以使用現(xiàn)有的類,并根據(jù)需要進行修改;
第6章展示如何使用Java的接口(可幫助你充分獲得Java的完全面向?qū)ο蟪绦蛟O計能力)、lambda表達式(用來表述可以在以后某個時間點執(zhí)行的代碼塊)和內(nèi)部類;
第7章討論異常處理,并給出大量實用的調(diào)試技巧;
第8章概要介紹泛型程序設計,使程序更可讀、更安全;
第9章討論Java平臺的集合框架,以及如何充分利用內(nèi)建的標準集合;
第10章介紹GUI程序設計(包括如何建立窗口、如何在窗口中繪圖、如何利用幾何圖形繪圖、如何采用多種字體格式化文本,以及如何顯示圖像)和編寫代碼來響應事件(如鼠標點擊事件和按鍵事件);
第11章詳細討論Swing GUI工具包,以建立跨平臺的圖形用戶界面,包括各種按鈕、文本組件、邊框、滑塊、列表框、菜單以及對話框的有關內(nèi)容;
第12章討論并發(fā)。本書*后還有一個附錄,其中列出了Java語言的保留字。
如需了解Java高級UI特性、企業(yè)編程、網(wǎng)絡、安全和Java強大的模塊系統(tǒng)等內(nèi)容,請點擊直達卷II*高級特性的購買鏈接。
Java領域極有影響力和價值的著作之一,與《Java編程思想》齊名,10余年全球暢銷不衰,廣受好評。
針對Java SE 9、10、11全面更新,系統(tǒng)全面講解Java語言的核心概念、語法、重要特性和開發(fā)方法,包含大量案例,實踐性強。
本書是一本可以指導程序員編寫健壯且可維護代碼的經(jīng)典教程和參考書。不論是使用Java SE 9、10還是11,本書都能幫助你深入理解這門語言及其API。書中提供了數(shù)百個示例程序,所有這些代碼都經(jīng)過精心設計,不僅易于理解,也很容易實際應用。
這一版做了全面更新,特別是示例的更新,反映了人們期待已久的Java模塊化特性,為讀者展示了如何編寫更易于管理和演進的代碼。你會了解如何使用新的JShell的讀取-計算-打印循環(huán)(REPL)進行快捷且更具探索性的開發(fā),以及應用Process API、競爭鎖定、日志和編譯的重大改進。
在本卷中,作者全面深入地介紹了Java語言的基礎知識和UI編程,包括對象、泛型、集合、lambda表達式、Swing設計、并發(fā)和函數(shù)式編程。如果你是一個有經(jīng)驗的程序員,正在轉(zhuǎn)向Java SE 9、10或11,要想獲得專家見解、解決方案和豐富的代碼,再沒有比這本書更好的資源了。
通過閱讀本書,你將:
●掌握編寫一流Java代碼的基本技術以及Java用法和*實踐
●充分利用接口、lambda表達式和內(nèi)部類的強大功能
● 通過有效的異常處理和調(diào)試使程序更堅固
● 利用泛型編程編寫更安全、更可重用的代碼
● 利用Java的標準集合改善性能和效率
● 利用Swing工具包構(gòu)建跨平臺GUI
●使用Java改進的并發(fā)特性充分利用多核處理器
如需了解Java高級UI特性、企業(yè)編程、網(wǎng)絡、安全和Java強大的模塊系統(tǒng)等內(nèi)容,請點擊上圖直達卷II*高級特性的購買鏈接。
致讀者
1995年年底,Java語言在Internet舞臺一亮相便名聲大噪。原因在于它將有望成為連接用戶與信息的萬能膠,而不論這些信息來自Web服務器、數(shù)據(jù)庫、信息提供商,還是任何其他可以想象的渠道。事實上,就發(fā)展前景而言,Java的地位是獨一無二的。它是一種完全可信賴的程序設計語言,并得到了廣泛認可。其固有的可靠性與安全性不僅令Java程序員放心,也令使用Java程序的用戶放心。Java內(nèi)建了對網(wǎng)絡編程、數(shù)據(jù)庫連接和并發(fā)等高級程序設計任務的支持。
1995年以來,已經(jīng)發(fā)布了Java開發(fā)工具包(Java Development Kit)的11個主要版本。在過去的20年中,應用程序編程接口(API)已經(jīng)從200個類擴展到超過4000個類,F(xiàn)在這些API覆蓋了用戶界面構(gòu)建、數(shù)據(jù)庫管理、國際化、安全性以及XML處理等各個不同的領域。
本書是《Java核心技術》第11版的卷Ⅰ。自《Java核心技術》出版以來,每個新版本都盡可能快地跟上Java開發(fā)工具包發(fā)展的步伐,而且每一版都重新改寫了部分內(nèi)容,以便利用Java的最新特性。這一版經(jīng)過修訂,反映了Java 標準版(Java SE)9、10和11的特性。
與本書前幾版一樣,這一版仍然將讀者群定位為那些打算將Java應用到實際工程項目中的程序設計人員。本書假設讀者是一名具有程序設計語言(除Java之外)堅實背景知識的程序員,并且不希望書中充斥著玩具式的示例(諸如,烤面包機、動物園的動物或神經(jīng)質(zhì)的跳動文本)。這些內(nèi)容絕對不會在本書中出現(xiàn)。本書的目標是讓讀者充分理解書中介紹的Java語言及Java類庫的相關特性,而不會產(chǎn)生任何誤解。
在本書中,我們選用大量的示例代碼演示所討論的每一個語言特性和類庫特性。我們有意使用簡單的示例程序以突出重點,然而,其中的大部分既不是贗品也沒有偷工減料。它們將成為讀者自己編寫代碼的良好開端。
我們假定讀者愿意(甚至渴望)學習Java提供的所有高級特性。例如,本書將詳細介紹下列內(nèi)容:
面向?qū)ο蟪绦蛟O計
反射與代理
接口與內(nèi)部類
異常處理
泛型程序設計
集合框架
事件監(jiān)聽器模型
圖形用戶界面設計
并發(fā)
【關于本書】
第1章概述Java與其他程序設計語言不同的功能。解釋這種語言的設計初衷,以及在哪些方面達到了預期。然后,簡要敘述Java誕生和發(fā)展的歷史。
第2章詳細論述如何下載和安裝JDK以及本書的程序示例。然后,通過編譯和運行3個典型的Java程序(一個控制臺應用、一個圖形應用、一個applet),指導讀者使用簡易的JDK、啟用Java的文本編輯器以及一個Java IDE。
第3章開始討論Java 語言。這一章涉及的基礎知識有變量、循環(huán)以及簡單的函數(shù)。對于C或C 程序員來說,學習這一章的內(nèi)容將會感覺一帆風順,因為這些語言特性的語法本質(zhì)上與C語言相同。對于沒有C語言程序設計背景,但使用過其他程序設計語言(如Visual Basic)的程序員來說,仔細閱讀這一章是非常必要的。
面向?qū)ο蟪绦蛟O計(Object-Oriented Programming,OOP)是當今程序設計的主流,而Java是一種面向?qū)ο蟮恼Z言。
第4章將介紹面向?qū)ο髢纱蠡凶钪匾囊粋封裝概念,以及Java語言實現(xiàn)封裝的機制,即類與方法。除了Java語言規(guī)則之外,還對如何完成合理的OOP設計給出了忠告。最后,介紹奇妙的javadoc工具,它將代碼注釋轉(zhuǎn)換為一組包含超鏈接的網(wǎng)頁。熟悉C 的程序員可以快速地瀏覽這一章,而沒有面向?qū)ο蟪绦蛟O計背景的程序員在進一步學習Java之前應當先花一些時間了解OOP的有關概念。
類與封裝僅僅是OOP中的一部分,第5章將介紹另一部分繼承。繼承使程序員可以使用現(xiàn)有的類,并根據(jù)需要進行修改。這是Java程序設計中的一個基礎技術。Java中的繼承機制與C 的繼承機制十分相似。重申一次,C 程序員可以只關注兩種語言的不同之處。
第6章展示如何使用Java的接口。接口可以讓你的理解超越第5章中的簡單繼承模型。掌握接口可以充分獲得Java的完全面向?qū)ο蟮某绦蛟O計能力。介紹接口之后,我們將轉(zhuǎn)而介紹lambda表達式(lambda expression),這是一種簡潔的方法,用來表述可以在以后某個時間點執(zhí)行的代碼塊。本章還將介紹Java的一個有用的技術特性內(nèi)部類。
第7章討論異常處理(exception handling),這是Java的一種健壯機制,用于處理正常運行的程序可能出現(xiàn)意外的情況。異常提供了一種將正常處理代碼與錯誤處理代碼分開的有效手段。當然,即使程序能夠處理所有異常條件,仍然有可能無法按照預計的方式工作。這一章的后半部分將給出大量實用的調(diào)試技巧。
第8章概要介紹泛型程序設計。泛型程序設計可以讓程序更可讀、更安全。我們會展示如何使用強類型機制,而舍棄不好看也不安全的強制類型轉(zhuǎn)換,以及如何處理與老版本Java兼容所帶來的復雜問題。
第9章討論的是Java平臺的集合框架。如果希望收集多個對象并在以后獲取這些對象,就應當使用集合,這是這種情況下最適用的做法,不要簡單地把這些元素放在一個數(shù)組中。這一章會介紹如何充分利用內(nèi)建的標準集合。
第10章介紹GUI程序設計。我們會討論如何建立窗口、如何在窗口中繪圖、如何利用幾何圖形繪圖、如何采用多種字體格式化文本,以及如何顯示圖像。接下來你會了解如何編寫代碼來響應事件,如鼠標點擊事件或按鍵事件。
第11章詳細討論Swing GUI工具包。Swing工具包允許建立跨平臺的圖形用戶界面。在這里你會了解各種按鈕、文本組件、邊框、滑塊、列表框、菜單以及對話框的有關內(nèi)容。不過,一些更高級的組件會在卷Ⅱ中討論。
第12章是本書的最后一章,這一章將討論并發(fā),并發(fā)能夠讓程序任務并行執(zhí)行。在當今這個時代,大多數(shù)處理器都有多個內(nèi)核,你通常希望這些內(nèi)核都在工作,并發(fā)是Java技術的一個重要而且令人振奮的應用。
還有關于JavaFX的額外的一章,其中會給出JavaFX的簡要介紹,這是開發(fā)桌面應用的一個現(xiàn)代GUI工具包。
[美]凱·S.霍斯特曼(Cay S. Horstmann )圣何塞州立大學計算機科學系教授、Java的倡導者。他是《Java核心技術》兩卷本的作者,并著有《Core Java SE 9 for the Impatient, Second Edition》 (Addison-Wesley 2018)和《Scala for the Impatient, Second Edition》(Addison- Wesley, 2017)。他還為專業(yè)程序員和計算機科學專業(yè)的學生撰寫過數(shù)十本其他圖書。
譯者序
前言
致謝
第1章 Java程序設計概述 1
1.1 Java程序設計平臺 1
1.2 Java白皮書的關鍵術語 2
1.2.1 簡單性 2
1.2.2 面向?qū)ο?3
1.2.3 分布式 3
1.2.4 健壯性 3
1.2.5 安全性 3
1.2.6 體系結(jié)構(gòu)中立 4
1.2.7 可移植性 4
1.2.8 解釋型 5
1.2.9 高性能 5
1.2.10 多線程 5
1.2.11 動態(tài)性 6
1.3 Java applet與Internet 6
1.4 Java發(fā)展簡史 7
1.5 關于Java的常見誤解 10
第2章 Java程序設計環(huán)境 12
2.1 安裝Java開發(fā)工具包 12
2.1.1 下載JDK 12
2.1.2 設置JDK 14
2.1.3 安裝庫源文件和文檔 16
2.2 使用命令行工具 16
2.3 使用集成開發(fā)環(huán)境 20
2.4 JShell 23
第3章 Java的基本程序設計結(jié)構(gòu) 26
3.1 一個簡單的Java應用程序 26
3.2 注釋 29
3.3 數(shù)據(jù)類型 29
3.3.1 整型 30
3.3.2 浮點類型 31
3.3.3 char類型 32
3.3.4 Unicode和char類型 33
3.3.5 boolean類型 34
3.4 變量與常量 34
3.4.1 聲明變量 34
3.4.2 變量初始化 35
3.4.3 常量 36
3.4.4 枚舉類型 37
3.5 運算符 37
3.5.1 算術運算符 37
3.5.2 數(shù)學函數(shù)與常量 38
3.5.3 數(shù)值類型之間的轉(zhuǎn)換 40
3.5.4 強制類型轉(zhuǎn)換 41
3.5.5 結(jié)合賦值和運算符 41
3.5.6 自增與自減運算符 41
3.5.7 關系和boolean運算符 42
3.5.8 位運算符 43
3.5.9 括號與運算符級別 43
3.6 字符串 44
3.6.1 子串 45
3.6.2 拼接 45
3.6.3 不可變字符串 45
3.6.4 檢測字符串是否相等 47
3.6.5 空串與Null串 48
3.6.6 碼點與代碼單元 48
3.6.7 String API 49
3.6.8 閱讀聯(lián)機API文檔 51
3.6.9 構(gòu)建字符串 54
3.7 輸入與輸出 55
3.7.1 讀取輸入 55
3.7.2 格式化輸出 57
3.7.3 文件輸入與輸出 61
3.8 控制流程 62
3.8.1 塊作用域 63
3.8.2 條件語句 63
3.8.3 循環(huán) 66
3.8.4 確定循環(huán) 69
3.8.5 多重選擇:switch語句 72
3.8.6 中斷控制流程的語句 74
3.9 大數(shù) 76
3.10 數(shù)組 79
3.10.1 聲明數(shù)組 79
3.10.2 訪問數(shù)組元素 80
3.10.3 for each循環(huán) 81
3.10.4 數(shù)組拷貝 82
3.10.5 命令行參數(shù) 82
3.10.6 數(shù)組排序 83
3.10.7 多維數(shù)組 86
3.10.8 不規(guī)則數(shù)組 88
第4章 對象與類 92
4.1 面向?qū)ο蟪绦蛟O計概述 92
4.1.1 類 93
4.1.2 對象 94
4.1.3 識別類 94
4.1.4 類之間的關系 95
4.2 使用預定義類 96
4.2.1 對象與對象變量 96
4.2.2 Java類庫中的LocalDate類 99
4.2.3 更改器方法與訪問器方法 100
4.3 用戶自定義類 103
4.3.1 Employee類 104
4.3.2 多個源文件的使用 106
4.3.3 剖析Employee類 107
4.3.4 從構(gòu)造器開始 107
4.3.5 用var聲明局部變量 109
4.3.6 使用null引用 109
4.3.7 隱式參數(shù)與顯式參數(shù) 110
4.3.8 封裝的優(yōu)點 111
4.3.9 基于類的訪問權限 113
4.3.10 私有方法 114
4.3.11 f?inal實例字段 114
4.4 靜態(tài)字段與靜態(tài)方法 115
4.4.1 靜態(tài)字段 115
4.4.2 靜態(tài)常量 116
4.4.3 靜態(tài)方法 116
4.4.4 工廠方法 117
4.4.5 main方法 118
4.5 方法參數(shù) 121
4.6 對象構(gòu)造 126
4.6.1 重載 126
4.6.2 默認字段初始化 127
4.6.3 無參數(shù)的構(gòu)造器 127
4.6.4 顯式字段初始化 128
4.6.5 參數(shù)名 129
4.6.6 調(diào)用另一個構(gòu)造器 129
4.6.7 初始化塊 130
4.6.8 對象析構(gòu)與f?inalize方法 134
4.7 包 134
4.7.1 包名 134
4.7.2 類的導入 135
4.7.3 靜態(tài)導入 136
4.7.4 在包中增加類 137
4.7.5 包訪問 139
4.7.6 類路徑 140
4.7.7 設置類路徑 142
4.8 JAR文件 143
4.8.1 創(chuàng)建JAR文件 143
4.8.2 清單文件 144
4.8.3 可執(zhí)行JAR文件 145
4.8.4 多版本JAR文件 145
4.8.5 關于命令行選項的說明 146
4.9 文檔注釋 148
4.9.1 注釋的插入 148
4.9.2 類注釋 149
4.9.3 方法注釋 149
4.9.4 字段注釋 150
4.9.5 通用注釋 150
4.9.6 包注釋 151
4.9.7 注釋抽取 151
4.10 類設計技巧 152
第5章 繼承 155
5.1 類、超類和子類 155
5.1.1 定義子類 155
5.1.2 覆蓋方法 157
5.1.3 子類構(gòu)造器 158
5.1.4 繼承層次 162
5.1.5 多態(tài) 162
5.1.6 理解方法調(diào)用 163
5.1.7 阻止繼承:f?inal類和方法 165
5.1.8 強制類型轉(zhuǎn)換 166
5.1.9 抽象類 168
5.1.10 受保護訪問 173
5.2 Object:所有類的超類 174
5.2.1 Object類型的變量 174
5.2.2 equals方法 175
5.2.3 相等測試與繼承 176
5.2.4 hashCode方法 179
5.2.5 toString方法 181
5.3 泛型數(shù)組列表 186
5.3.1 聲明數(shù)組列表 187
5.3.2 訪問數(shù)組列表元素 189
5.3.3 類型化與原始數(shù)組列表的
兼容性 191
5.4 對象包裝器與自動裝箱 192
5.5 參數(shù)數(shù)量可變的方法 195
5.6 枚舉類 196
5.7 反射 198
5.7.1 Class類 199
5.7.2 聲明異常入門 201
5.7.3 資源 202
5.7.4 利用反射分析類的能力 203
5.7.5 使用反射在運行時分析
對象 208
5.7.6 使用反射編寫泛型數(shù)組
代碼 213
5.7.7 調(diào)用任意方法和構(gòu)造器 216
5.8 繼承的設計技巧 219
第6章 接口、lambda表達式與
內(nèi)部類 222
6.1 接口 222
6.1.1 接口的概念 222
6.1.2 接口的屬性 228
6.1.3 接口與抽象類 229
6.1.4 靜態(tài)和私有方法 230
6.1.5 默認方法 230
6.1.6 解決默認方法沖突 231
6.1.7 接口與回調(diào) 233
6.1.8 Comparator接口 235
6.1.9 對象克隆 236
6.2 lambda表達式 242
6.2.1 為什么引入lambda表達式 242
6.2.2 lambda表達式的語法 243
6.2.3 函數(shù)式接口 245
6.2.4 方法引用 247
6.2.5 構(gòu)造器引用 250
6.2.6 變量作用域 250
6.2.7 處理lambda表達式 252
6.2.8 再談Comparator 254
6.3 內(nèi)部類 255
6.3.1 使用內(nèi)部類訪問對象狀態(tài) 256
6.3.2 內(nèi)部類的特殊語法規(guī)則 259
6.3.3 內(nèi)部類是否有用、必要和
安全 260
6.3.4 局部內(nèi)部類 262
6.3.5 由外部方法訪問變量 263
6.3.6 匿名內(nèi)部類 264
6.3.7 靜態(tài)內(nèi)部類 267
6.4 服務加載器 270
6.5 代理 273
6.5.1 何時使用代理 273
6.5.2 創(chuàng)建代理對象 273
6.5.3 代理類的特性 277
第7章 異常、斷言和日志 279
7.1 處理錯誤 279
7.1.1 異常分類 280
7.1.2 聲明檢查型異常 282
7.1.3 如何拋出異常 284
7.1.4 創(chuàng)建異常類 285
7.2 捕獲異常 286
7.2.1 捕獲異常 286
7.2.2 捕獲多個異常 288
7.2.3 再次拋出異常與異常鏈 289
7.2.4 f?inally子句 290
7.2.5 try-with-Resources語句 292
7.2.6 分析堆棧軌跡元素 294
7.3 使用異常的技巧 297
7.4 使用斷言 300
7.4.1 斷言的概念 300
7.4.2 啟用和禁用斷言 301
7.4.3 使用斷言完成參數(shù)檢查 302
7.4.4 使用斷言提供假設文檔 303
7.5 日志 304
7.5.1 基本日志 305
7.5.2 高級日志 305
7.5.3 修改日志管理器配置 307
7.5.4 本地化 308
7.5.5 處理器 309
7.5.6 過濾器 312
7.5.7 格式化器 313
7.5.8 日志技巧 313
7.6 調(diào)試技巧 321
第8章 泛型程序設計 326
8.1 為什么要使用泛型程序設計 326
8.1.1 類型參數(shù)的好處 326
8.1.2 誰想成為泛型程序員 328
8.2 定義簡單泛型類 328
8.3 泛型方法 330
8.4 類型變量的限定 331
8.5 泛型代碼和虛擬機 333
8.5.1 類型擦除 333
8.5.2 轉(zhuǎn)換泛型表達式 335
8.5.3 轉(zhuǎn)換泛型方法 335
8.5.4 調(diào)用遺留代碼 337
8.6 限制與局限性 338
8.6.1 不能用基本類型實例化類型參數(shù) 338
8.6.2 運行時類型查詢只適用于原始類型 338
8.6.3 不能創(chuàng)建參數(shù)化類型的數(shù)組 338
8.6.4 Varargs警告 339
8.6.5 不能實例化類型變量 340
8.6.6 不能構(gòu)造泛型數(shù)組 341
8.6.7 泛型類的靜態(tài)上下文中類型變量無效 342
8.6.8 不能拋出或捕獲泛型類的實例 343
8.6.9 可以取消對檢查型異常的檢查 343
8.6.10 注意擦除后的沖突 345
8.7 泛型類型的繼承規(guī)則 346
8.8 通配符類型 348
8.8.1 通配符概念 348
8.8.2 通配符的超類型限定 349
8.8.3 無限定通配符 351
8.8.4 通配符捕獲 352
8.9 反射和泛型 354
8.9.1 泛型Class類 354
8.9.2 使用Class參數(shù)進行類型匹配 355
8.9.3 虛擬機中的泛型類型信息 356
8.9.4 類型字面量 359
第9章 集合 365
9.1 Java集合框架 365
9.1.1 集合接口與實現(xiàn)分離 365
9.1.2 Collection接口 368
9.1.3 迭代器 368
9.1.4 泛型實用方法 370
9.2 集合框架中的接口 373
9.3 具體集合 375
9.3.1 鏈表 375
9.3.2 數(shù)組列表 384
9.3.3 散列集 385
9.3.4 樹集 388
9.3.5 隊列與雙端隊列 391
9.3.6 優(yōu)先隊列 392
9.4 映射 394
9.4.1 基本映射操作 394
9.4.2 更新映射條目 397
9.4.3 映射視圖 398
9.4.4 弱散列映射 399
9.4.5 鏈接散列集與映射 400
9.4.6 枚舉集與映射 401
9.4.7 標識散列映射 402
9.5 視圖與包裝器 403
9.5.1 小集合 404
9.5.2 子范圍 405
9.5.3 不可修改的視圖 405
9.5.4 同步視圖 406
9.5.5 檢查型視圖 407
9.5.6 關于可選操作的說明 407
9.6 算法 411
9.6.1 為什么使用泛型算法 411
9.6.2 排序與混排 412
9.6.3 二分查找 414
9.6.4 簡單算法 415
9.6.5 批操作 417
9.6.6 集合與數(shù)組的轉(zhuǎn)換 418
9.6.7 編寫自己的算法 418
9.7 遺留的集合 419
9.7.1 Hashtable類 419
9.7.2 枚舉 419
9.7.3 屬性映射 421
9.7.4 棧 424
9.7.5 位集 424
第10章 圖形用戶界面程序設計 429
10.1 Java用戶界面工具包簡史 429
10.2 顯示窗體 430
10.2.1 創(chuàng)建窗體 431
10.2.2 窗體屬性 433
10.3 在組件中顯示信息 435
10.3.1 處理2D圖形 439
10.3.2 使用顏色 445
10.3.3 使用字體 446
10.3.4 顯示圖像 452
10.4 事件處理 453
10.4.1 基本事件處理概念 453
10.4.2 實例:處理按鈕點擊事件 454
10.4.3 簡潔地指定監(jiān)聽器 457
10.4.4 適配器類 458
10.4.5 動作 460
10.4.6 鼠標事件 464
10.4.7 AWT事件繼承層次 469
10.5 首選項API 472
第11章 Swing用戶界面組件 478
11.1 Swing和模型視圖控制器設計模式 478
11.2 布局管理概述 481
11.2.1 布局管理器 482
11.2.2 邊框布局 483
11.2.3 網(wǎng)格布局 484
11.3 文本輸入 485
11.3.1 文本域 486
11.3.2 標簽和標簽組件 487
11.3.3 密碼域 488
11.3.4 文本區(qū) 489
11.3.5 滾動窗格 489
11.4 選擇組件 491
11.4.1 復選框 492
11.4.2 單選按鈕 494
11.4.3 邊框 497
11.4.4 組合框 499
11.4.5 滑動條 502
11.5 菜單 507
11.5.1 菜單構(gòu)建 507
11.5.2 菜單項中的圖標 509
11.5.3 復選框和單選按鈕菜單項 510
11.5.4 彈出菜單 511
11.5.5 鍵盤助記符和加速器 512
11.5.6 啟用和禁用菜單項 514
11.5.7 工具條 518
11.5.8 工具提示 519
11.6 復雜的布局管理 520
11.6.1 網(wǎng)格包布局 520
11.6.2 定制布局管理器 529
11.7 對話框 532
11.7.1 選項對話框 533
11.7.2 創(chuàng)建對話框 536
11.7.3 數(shù)據(jù)交換 540
11.7.4 文件對話框 545
第12章 并發(fā) 552
12.1 什么是線程 552
12.2 線程狀態(tài) 555
12.2.1 新建線程 556
12.2.2 可運行線程 556
12.2.3 阻塞和等待線程 556
12.2.4 終止線程 558
12.3 線程屬性 558
12.3.1 中斷線程 558
12.3.2 守護線程 561
12.3.3 線程名 561
12.3.4 未捕獲異常的處理器 561
12.3.5 線程優(yōu)先級 563
12.4 同步 563
12.4.1 競態(tài)條件的一個例子 563
12.4.2 競態(tài)條件詳解 567
12.4.3 鎖對象 568
12.4.4 條件對象 571
12.4.5 synchronized關鍵字 576
12.4.6 同步塊 579
12.4.7 監(jiān)視器概念 580
12.4.8 volatile字段 581
12.4.9 final變量 582
12.4.10 原子性 582
12.4.11 死鎖 584
12.4.12 線程局部變量 586
12.4.13 為什么廢棄stop和suspend方法 587
12.5 線程安全的集合 589
12.5.1 阻塞隊列 589
12.5.2 高效的映射、集和隊列 595
12.5.3 映射條目的原子更新 596
12.5.4 對并發(fā)散列映射的批操作 599
12.5.5 并發(fā)集視圖 600
12.5.6 寫數(shù)組的拷貝 601
12.5.7 并行數(shù)組算法 601
12.5.8 較早的線程安全集合 602
12.6 任務和線程池 603
12.6.1 Callable與Future 603
12.6.2 執(zhí)行器 605
12.6.3 控制任務組 607
12.6.4 fork-join框架 612
12.7 異步計算 615
12.7.1 可完成Future 615
12.7.2 組合可完成Future 616
12.7.3 用戶界面回調(diào)中的長時間運行任務 622
12.8 進程 628
12.8.1 建立一個進程 628
12.8.2 運行一個進程 630
12.8.3 進程句柄 631
附錄 Java關鍵字 634