産品特色
編輯推薦
Java領域*有影響力和價值的著作之一,與《Java編程思想》齊名,10餘年全球暢銷不衰,廣受好評
根據Java SE 8全麵更新,係統全麵講解Java語言的核心概念、語法、重要特性和開發方法,包含大量案例,實踐性強 ??
一直以來,《Java核心技術》都被認為是麵嚮高級程序員的經典教程和參考書,它內容翔實、客觀準確,不拖泥帶水,是想為實際應用編寫健壯Java代碼的程序員的選。如今,本版進行瞭全麵更新, 以反映近年來人們翹首以待、變革*大的Java版本(Java SE 8)的內容。這一版經過重寫,並重新組織,全麵闡釋瞭新的Java SE 8特性、慣用法和*佳實踐,其中包含數百個示例程序,所有這些代碼都經過精心設計,不僅易於理解,也很容易實際應用。
本書為專業程序員解決實際問題而寫,可以幫助你深入瞭解Java語言和庫。在捲I中,Horstmann主要強調基本語言概念和現代用戶界麵編程基礎,深入介紹瞭從Java麵嚮對象編程到泛型、集閤、lambda錶達式、Swing UI設計以及並發和函數式編程的*新方法等內容。
通過閱讀本書,你將:
充分利用你現有的編程知識快速掌握核心Java語法
瞭解Java中封裝、類和繼承如何工作
掌握利用接口、內部類和lambda錶達式來實現函數式編程
利用異常處理和有效調試提高程序健壯性
利用泛型和強類型編寫更安全、更可讀的程序
使用預建集閤收集多個對象以便以後獲取
從頭開始掌握並發編程技術
利用標準Swing組件構建現代跨平颱GUI
部署可配置應用和applet,並通過互聯網發布
利用新的函數式技術簡化並發性和提高性能
如果你是一個資深程序員,剛剛轉嚮Java SE 8,本書絕對是可靠、實用的“夥伴”,不僅現在能幫助你,在未來的很多年還會繼續陪伴你前行。
內容簡介
Java領域*有影響力和價值的著作之一,由擁有20多年教學與研究經驗的資深Java技術專傢撰寫(獲Jolt大奬),與《Java編程思想》齊名,10餘年全球暢銷不衰,廣受好評。第10版根據Java SE 8全麵更新,同時修正瞭第9版中的不足,係統全麵講解瞭Java語言的核心概念、語法、重要特性和開發方法,包含大量案例,實踐性強。
本書共14章。第1章概述Java語言與其他程序設計語言不同的性能;第2章講解如何下載和安裝JDK及本書的程序示例;第3章介紹變量、循環和簡單的函數;第4章講解類和封裝;第5章介紹繼承;第6章解釋接口和內部類;第7章討論異常處理,並給齣大量實用的調試技巧;第8章概要介紹泛型程序設計;第9章討論Java平颱的集閤框架;第10章介紹GUI程序設計,討論如何建立窗口、如何在窗口中繪圖、如何利用幾何圖形繪圖、如何采用多種字體格式化文本,以及如何顯示圖像;第11章詳細討論抽象窗口工具包的事件模型;第12章詳細討論Swing GUI工具包;第13章介紹如何將程序部署為應用或applet;第14章討論並發。本書最後還有一個附錄,其中列齣瞭Java語言的保留字。
作者簡介
凱 S. 霍斯特曼(Cay S. Horstmann),聖何塞州立大學計算機科學係教授、Java的倡導者,經常在開發人員會議上發錶演講。他是《Core Java for the Impatient》(2015)《Java SE 8 for the Really Impatient》(2014)和《Scala for the lmpatient》(2012)的作者,這些書均由Addison-Wesley齣版。他為專業程序員和計算機科學專業學生編寫過數十本圖書。
目錄
譯者序
前言
緻謝
第1章 Java程序設計概述 1
1.1 Java程序設計平颱 1
1.2 Java“白皮書”的關鍵術語 2
1.2.1 簡單性 2
1.2.2 麵嚮對象 2
1.2.3 分布式 3
1.2.4 健壯性 3
1.2.5 安全性 3
1.2.6 體係結構中立 4
1.2.7 可移植性 4
1.2.8 解釋型 5
1.2.9 高性能 5
1.2.10 多綫程 5
1.2.11 動態性 5
1.3 Java applet與Internet 6
1.4 Java發展簡史 7
1.5 關於Java的常見誤解 9
第2章 Java程序設計環境 12
2.1 安裝Java開發工具包 12
2.1.1 下載JDK 12
2.1.2 設置JDK 13
2.1.3 安裝庫源文件和文檔 15
2.2 使用命令行工具 16
2.3 使用集成開發環境 18
2.4 運行圖形化應用程序 21
2.5 構建並運行applet 23
第3章 Java的基本程序設計結構 28
3.1 一個簡單的Java應用程序 28
3.2 注釋 31
3.3 數據類型 32
3.3.1 整型 32
3.3.2 浮點類型 33
3.3.3 char類型 34
3.3.4 Unicode和char類型 35
3.3.5 boolean類型 35
3.4 變量 36
3.4.1 變量初始化 37
3.4.2 常量 37
3.5 運算符 38
3.5.1 數學函數與常量 39
3.5.2 數值類型之間的轉換 40
3.5.3 強製類型轉換 41
3.5.4 結閤賦值和運算符 42
3.5.5 自增與自減運算符 42
3.5.6 關係和boolean運算符 42
3.5.7 位運算符 43
3.5.8 括號與運算符級彆 44
3.5.9 枚舉類型 45
3.6 字符串 45
3.6.1 子串 45
3.6.2 拼接 46
3.6.3 不可變字符串 46
3.6.4 檢測字符串是否相等 47
3.6.5 空串與Null串 48
3.6.6 碼點與代碼單元 49
3.6.7 String API 50
3.6.8 閱讀聯機API文檔 52
3.6.9 構建字符串 54
3.7 輸入輸齣 55
3.7.1 讀取輸入 55
3.7.2 格式化輸齣 58
3.7.3 文件輸入與輸齣 61
3.8 控製流程 63
3.8.1 塊作用域 63
3.8.2 條件語句 63
3.8.3 循環 66
3.8.4 確定循環 69
3.8.5 多重選擇:switch語句 72
3.8.6 中斷控製流程語句 74
3.9 大數值 76
3.10 數組 78
3.10.1 for each循環 79
3.10.2 數組初始化以及匿名數組 80
3.10.3 數組拷貝 81
3.10.4 命令行參數 81
3.10.5 數組排序 82
3.10.6 多維數組 85
3.10.7 不規則數組 88
第4章 對象與類 91
4.1 麵嚮對象程序設計概述 91
4.1.1 類 92
4.1.2 對象 93
4.1.3 識彆類 93
4.1.4 類之間的關係 94
4.2 使用預定義類 95
4.2.1 對象與對象變量 95
4.2.2 Java類庫中的LocalDate類 98
4.2.3 更改器方法與訪問器方法 100
4.3 用戶自定義類 103
4.3.1 Employee類 103
4.3.2 多個源文件的使用 105
4.3.3 剖析Employee類 106
4.3.4 從構造器開始 106
4.3.5 隱式參數與顯式參數 108
4.3.6 封裝的優點 109
4.3.7 基於類的訪問權限 111
4.3.8 私有方法 111
4.3.9 f?inal實例域 112
4.4 靜態域與靜態方法 112
4.4.1 靜態域 112
4.4.2 靜態常量 113
4.4.3 靜態方法 114
4.4.4 工廠方法 115
4.4.5 main方法 115
4.5 方法參數 118
4.6 對象構造 123
4.6.1 重載 123
4.6.2 默認域初始化 123
4.6.3 無參數的構造器 124
4.6.4 顯式域初始化 125
4.6.5 參數名 125
4.6.6 調用另一個構造器 126
4.6.7 初始化塊 127
4.6.8 對象析構與f?inalize方法 130
4.7 包 131
4.7.1 類的導入 131
4.7.2 靜態導入 133
4.7.3 將類放入包中 133
4.7.4 包作用域 136
4.8 類路徑 137
4.8.1 設置類路徑 139
4.9 文檔注釋 140
4.9.1 注釋的插入 140
4.9.2 類注釋 140
4.9.3 方法注釋 141
4.9.4 域注釋 142
4.9.5 通用注釋 142
4.9.6 包與概述注釋 143
4.9.7 注釋的抽取 143
4.10 類設計技巧 144
第5章 繼承 147
5.1 類、超類和子類 147
5.1.1 定義子類 147
5.1.2 覆蓋方法 149
5.1.3 子類構造器 150
5.1.4 繼承層次 153
5.1.5 多態 154
5.1.6 理解方法調用 155
5.1.7 阻止繼承:f?inal類和方法 157
5.1.8 強製類型轉換 158
5.1.9 抽象類 160
5.1.10 受保護訪問 165
5.2 Object:所有類的超類 166
5.2.1 equals方法 166
5.2.2 相等測試與繼承 167
5.2.3 hashCode方法 170
5.2.4 toString方法 172
5.3 泛型數組列錶 178
5.3.1 訪問數組列錶元素 180
5.3.2 類型化與原始數組列錶的兼容性 183
5.4 對象包裝器與自動裝箱 184
5.5 參數數量可變的方法 187
5.6 枚舉類 188
5.7 反射 190
5.7.1 Class類 190
5.7.2 捕獲異常 192
5.7.3 利用反射分析類的能力 194
5.7.4 在運行時使用反射分析對象 198
5.7.5 使用反射編寫泛型數組代碼 202
5.7.6 調用任意方法 205
5.8 繼承的設計技巧 208
第6章 接口、lambda錶達式與內部類 211
6.1 接口 211
6.1.1 接口概念 211
6.1.2 接口的特性 217
6.1.3 接口與抽象類 218
6.1.4 靜態方法 218
6.1.5 默認方法 219
6.1.6 解決默認方法衝突 220
6.2 接口示例 222
6.2.1 接口與迴調 222
6.2.2 Comparator接口 224
6.2.3 對象剋隆 225
6.3 lambda錶達式 231
6.3.1 為什麼引入lambda錶達式 231
6.3.2 lambda錶達式的語法 232
6.3.3 函數式接口 234
6.3.4 方法引用 235
6.3.5 構造器引用 237
6.3.6 變量作用域 237
6.3.7 處理lambda錶達式 239
6.3.8 再談Comparator 242
6.4 內部類 242
6.4.1 使用內部類訪問對象狀態 244
6.4.2 內部類的特殊語法規則 247
6.4.3 內部類是否有用、必要和安全 248
6.4.4 局部內部類 250
6.4.5 由外部方法訪問變量 250
6.4.6 匿名內部類 252
6.4.7 靜態內部類 255
6.5 代理 258
6.5.1 何時使用代理 259
6.5.2 創建代理對象 259
6.5.3 代理類的特性 262
第7章 異常、斷言和日誌 264
7.1 處理錯誤 264
7.1.1 異常分類 265
7.1.2 聲明受查異常 267
7.1.3 如何拋齣異常 269
7.1.4 創建異常類 270
7.2 捕獲異常 271
7.2.1 捕獲異常 271
7.2.2 捕獲多個異常 273
7.2.3 再次拋齣異常與異常鏈 274
7.2.4 f?inally子句 275
7.2.5 帶資源的try語句 278
7.2.6 分析堆棧軌跡元素 280
7.3 使用異常機製的技巧 282
7.4 使用斷言 285
7.4.1 斷言的概念 285
7.4.2 啓用和禁用斷言 286
7.4.3 使用斷言完成參數檢查 287
7.4.4 為文檔假設使用斷言 288
7.5 記錄日誌 289
7.5.1 基本日誌 289
7.5.2 高級日誌 289
7.5.3 修改日誌管理器配置 291
7.5.4 本地化 292
7.5.5 處理器 293
7.5.6 過濾器 296
7.5.7 格式化器 296
7.5.8 日誌記錄說明 296
7.6 調試技巧 304
第8章 泛型程序設計 309
8.1 為什麼要使用泛型程序設計 309
8.1.1 類型參數的好處 309
8.1.2 誰想成為泛型程序員 310
8.2 定義簡單泛型類 311
8.3 泛型方法 313
8.4 類型變量的限定 314
8.5 泛型代碼和虛擬機 316
8.5.1 類型擦除 316
8.5.2 翻譯泛型錶達式 317
8.5.3 翻譯泛型方法 318
8.5.4 調用遺留代碼 319
8.6 約束與局限性 320
8.6.1 不能用基本類型實例化類型參數 320
8.6.2 運行時類型查詢隻適用於原始類型 321
8.6.3 不能創建參數化類型的數組 321
8.6.4 Varargs警告 322
8.6.5 不能實例化類型變量 323
8.6.6 不能構造泛型數組 323
8.6.7 泛型類的靜態上下文中類型變量無效 325
8.6.8 不能拋齣或捕獲泛型類的實例 325
8.6.9 可以消除對受查異常的檢查 326
8.6.10 注意擦除後的衝突 327
8.7 泛型類型的繼承規則 328
8.8 通配符類型 330
8.8.1 通配符概念 330
8.8.2 通配符的超類型限定 331
8.8.3 無限定通配符 334
8.8.4 通配符捕獲 334
8.9 反射和泛型 337
8.9.1 泛型Class類 337
8.9.2 使用Class參數進行類型匹配 338
8.9.3 虛擬機中的泛型類型信息 338
第9章 集閤 344
9.1 Java集閤框架 344
9.1.1 將集閤的接口與實現分離 344
9.1.2 Collection接口 346
9.1.3 迭代器 347
9.1.4 泛型實用方法 349
9.1.5 集閤框架中的接口 352
9.2 具體的集閤 353
9.2.1 鏈錶 355
9.2.2 數組列錶 362
9.2.3 散列集 363
9.2.4 樹集 366
9.2.5 隊列與雙端隊列 369
9.2.6 優先級隊列 371
9.3 映射 372
9.3.1 基本映射操作 372
9.3.2 更新映射項 375
9.3.3 映射視圖 376
9.3.4 弱散列映射 377
9.3.5 鏈接散列集與映射 378
9.3.6 枚舉集與映射 379
9.3.7 標識散列映射 380
9.4 視圖與包裝器 381
9.4.1 輕量級集閤包裝器 382
9.4.2 子範圍 382
9.4.3 不可修改的視圖 383
9.4.4 同步視圖 384
9.4.5 受查視圖 384
9.4.6 關於可選操作的說明 385
9.5 算法 388
9.5.1 排序與混排 389
9.5.2 二分查找 391
9.5.3 簡單算法 392
9.5.4 批操作 394
9.5.5 集閤與數組的轉換 394
9.5.6 編寫自己的算法 395
9.6 遺留的集閤 396
9.6.1 Hashtable類 397
9.6.2 枚舉 397
9.6.3 屬性映射 398
9.6.4 棧 399
9.6.5 位集 399
第10章 圖形程序設計 403
10.1 Swing概述 403
10.2 創建框架 407
10.3 框架定位 409
10.3.1 框架屬性 411
10.3.2 確定閤適的框架大小 411
10.4 在組件中顯示信息 415
10.5 處理2D圖形 419
10.6 使用顔色 426
10.7 文本使用特殊字體 429
10.8 顯示圖像 435
第11章 事件處理 439
11.1 事件處理基礎 439
11.1.1 實例:處理按鈕點擊事件 441
11.1.2 簡潔地指定監聽器 445
11.1.3 實例:改變觀感 447
11.1.4 適配器類 450
11.2 動作 453
11.3 鼠標事件 459
11.4 AWT事件繼承層次 465
11.4.1 語義事件和底層事件 466
第12章 Swing用戶界麵組件 469
12.1 Swing和模型–視圖–控製器設計模式 469
12.2 布局管理概述 474
12.3 文本輸入 481
12.4 選擇組件 488
12.5 菜單 504
12.6 復雜的布局管理 518
12.7 對話框 541
12.8 GUI程序排錯 573
第13章 部署Java應用程序 580
13.1 JAR文件 580
13.2 應用首選項的存儲 586
13.3 服務加載器 596
13.4 applet 598
13.5 Java Web Start 614
第14章 並發 624
14.1 什麼是綫程 624
14.2 中斷綫程 632
14.3 綫程狀態 635
14.4 綫程屬性 638
14.5 同步 640
14.6 阻塞隊列 668
14.7 綫程安全的集閤 673
14.8 Callable與Future 681
14.9 執行器 685
14.10 同步器 696
14.11 綫程與Swing 698
附錄A Java關鍵字 710
前言/序言
譯 者 序
書寫Java傳奇的Sun Microsystems曾經堪稱“日不落”帝國,但服務器市場的萎縮卻讓這個聲名赫赫的龐大帝國從蓬勃走嚮落寞。在2009年被Oracle公司收購之後,Sun公司逐漸淡齣瞭人們的視綫,而與此同時,我們也在很長一段時間內沒能看到Java當初活躍的身影。
Java就這樣退齣曆史舞颱瞭嗎?當然不是!從Sun公司2006年12月發布Java 6後,經過5年多的不懈努力,終於在2011年7月底發布瞭Java 7正式版。3年後,被冠名為“跳票王”的Oracle終於發布瞭Java 8的正式版,但對於很多開發者來說,Java 8卻比Java 7來得更漫長一些。主要是因為Oracle原本計劃在2013年發布正式版Java 8,卻因受睏於安全性的問題經過瞭兩次“跳票”。無論如何,如今Java 8來瞭,全新“革命”而不隻是“進化”的功能將會讓無數開發者動容。
值得一提的是,伴隨著Java的成長,《Java核心技術》也從第1版到第9版一路走來,得到瞭廣大Java程序設計人員的青睞,成為一本暢銷不衰的Java經典圖書。經過幾年的蟄伏,針對Java 8打造的《Java核心技術》第10版終於問世,這一版有瞭大幅的修訂和更新,以反映Java 8增補、刪改的內容。它將續寫從前的輝煌,使人們能及時跟上Java前進的腳步。
本書由周立新、陳波等主譯,程芳、劉曉兵、張練達、陳峰、江健、謝連寶、張雷生、楊健康、張瑩參與瞭全書的修改整理,並完善瞭關鍵部分的翻譯。全體人員共同完成瞭本書的翻譯工作。特彆需要說明的是,按照齣版社的要求,這一版的翻譯在老版本基礎上完成,因此尤其感謝之前版本的譯者葉乃文、鄺勁筠和杜永萍,他們的辛勤工作為新版本的翻譯奠定瞭很好的基礎。
書中文字與內容力求忠實原著,不過由於譯者水平有限,譯文肯定有不當之處,敬請批評指正。
譯者
2016年6月於北京
前 言
緻讀者
1995年年底,Java語言在Internet舞颱一亮相便名聲大噪。其原因在於它將有望成為連接用戶與信息的萬能膠,而不論這些信息來自Web服務器、數據庫、信息提供商,還是任何其他渠道。事實上,就發展前景而言,Java的地位是獨一無二的。它是一種完全可信賴的程序設計語言,得到瞭除微軟之外的所有廠傢的認可。其固有的可靠性與安全性不僅令Java程序員放心,也令使用Java程序的用戶放心。Java內建瞭對網絡編程、數據庫連接、多綫程等高級程序設計任務的支持。
1995年以來,已經發布瞭Java開發工具包(Java Development Kit)的9個主要版本。在過去的20年中,應用程序編程接口(API)已經從200個類擴展到超過4000個類。現在這些API覆蓋瞭用戶界麵構建、數據庫管理、國際化、安全性以及XML處理等各個不同的領域。
本書是《Java核心技術》第10版的捲Ⅰ。自《Java核心技術》齣版以來,每個新版本都盡可能快地跟上Java開發工具箱發展的步伐,而且每一版都重新改寫瞭部分內容,以便適應Java的最新特性。在這一版中,已經反映瞭Java 標準版(Java SE 8)的特性。
與前幾版一樣,本版仍然將讀者群定位在那些打算將Java應用到實際工程項目中的程序設計人員。本書假設讀者是一名具有程序設計語言(除Java之外)堅實背景知識的程序設計人員,並且不希望書中充斥著玩具式的示例(諸如,烤麵包機、動物園的動物或神經質的跳動文本)。這些內容絕對不會在本書中齣現。本書的目標是讓讀者充分理解書中介紹的Java語言及Java類庫的相關特性,而不會産生任何誤解。
在本書中,我們選用大量的示例代碼演示所討論的每一個語言特性和類庫特性。我們有意使用簡單的示例程序以突齣重點,然而,其中的大部分既不是贋品也沒有偷工減料。它們將成為讀者自己編寫代碼的良好開端。
我們假定讀者願意(甚至渴望)學習Java提供的所有高級特性。例如,本書將詳細介紹下列內容:
麵嚮對象程序設計
反射與代理
接口與內部類
異常處理
泛型程序設計
集閤框架
事件監聽器模型
使用Swing UI工具箱進行圖形用戶界麵設計
並行操作
隨著Java類庫的爆炸式增長,一本書無法涵蓋程序員需要瞭解的所有Java特性。因此,我們決定將本書分為兩捲。捲I(本書)集中介紹Java語言的基本概念以及圖形用戶界麵程序設計的基礎知識。捲Ⅱ(高級特性)涉及企業特性以及高級的用戶界麵程序設計,其中詳細討論下列內容:
流API
文件處理與正則錶達式
數據庫
XML處理
注釋
國際化
網絡編程
高級GUI組件
高級圖形
原生方法
本書中難免齣現錯誤和不準確之處。我們很想知道這些錯誤,當然,也希望同一個問題隻被告知一次。我們在網頁http://horstmann.com/corejava中以列錶的形式給齣瞭常見的問題、bug修正和解決方法。在勘誤頁(建議先閱讀一遍)最後附有用來報告bug並提齣修改意見的錶單。如果我們不能迴答每一個問題或沒有及時迴復,請不要失望。我們會認真地閱讀所有的來信,感謝您的建議使本書後續的版本更清晰、更有指導價值。
關於本書
第1章概述Java與其他程序設計語言不同的性能。解釋這種語言的設計初衷,以及在哪些方麵達到瞭預期的效果。然後,簡要敘述Java誕生和發展的曆史。
第2章詳細論述如何下載和安裝JDK以及本書的程序示例。然後,通過編譯和運行3個典型的Java程序(一個控製颱應用、一個圖形應用、一個applet),指導讀者使用簡易的JDK、可啓用Java的文本編輯器以及一個Java IDE。
第3章開始討論Java 語言。這一章涉及的基礎知識有變量、循環以及簡單的函數。對於C或C++程序員來說,學習這一章的內容將會感覺一帆風順,因為這些語言特性的語法本質上與C語言相同。對於沒有C語言程序設計背景,但使用過其他程序設計語言(如Visual Basic)的程序員來說,仔細地閱讀這一章是非常必要的。
麵嚮對象程序設計(Object-Oriented Programming, OOP)是當今程序設計的主流,而Java是一種完全麵嚮對象的語言。第4章將介紹麵嚮對象兩個基本成分中最重要的——封裝,以及Java語言實現封裝的機製,即類與方法。除瞭Java語言規則之外,還對如何完成閤理的OOP設計給齣瞭忠告。最後,介紹奇妙的javadoc工具,它將代碼注釋轉換為一組包含超鏈接的網頁。熟悉C++的程序員可以快速地瀏覽這一章,而沒有麵嚮對象程序設計背景的程序員應在進一步學習Java之前花一些時間瞭解OOP的有關概念。
類與封裝僅僅是OOP中的一部分,第5章將介紹另一部分——繼承。繼承使程序員可以使用現有的類,並根據需要進行修改。這是Java程序設計中的一個基礎技術。Java中的繼承機製與C++的繼承機製十分相似。C++程序員隻需關注兩種語言的不同之處即可。
第6章展示如何使用Java的接口。接口可以讓你的理解超越第5章的簡單繼承模型。掌握接口可以充分獲得Java的完全的麵嚮對象程序設計能力。介紹接口之後,我們將轉而介紹lambda錶達式(lambda expression),這是一種簡潔的方法,用來錶述可以在以後某個時間點執行的代碼塊。本章還將介紹Java的一個有用的技術特性——內部類。
第7章討論異常處理(exception handling),即Java的一種健壯機製,用於處理可正常運行程序可能齣現意外的情況。異常提供瞭一種將正常處理代碼與錯誤處理代碼分開的有效手段。當然,即使程序能夠處理所有異常條件,仍然有可能無法按照預計的方式工作。這一章的後半部分將給齣大量實用的調試技巧。
第8章概要介紹泛型程序設計。泛型程序設計可以讓程序更可讀、更安全。我們會展示如何使用強類型機製,而捨棄不安全的強製類型轉換,以及如何處理與舊版本Java兼容所帶來的復雜問題。
第9章討論的是Java平颱的集閤框架。如果希望收集多個對象並在以後獲取這些對象,就應當使用集閤,而不要簡單地把這些元素放在一個數組中,這是這種情況下最適用的做法。這一章會介紹如何充分利用內建的標準集閤。
第10章開始介紹GUI程序設計。我們會討論如何建立窗口、如何在窗口中繪圖、如何利用幾何圖形繪圖、如何采用多種字體格式化文本,以及如何顯示圖像。
第11章將詳細討論抽象窗口工具包(abstract window toolkit,AWT)的事件模型。你會看到如何編寫代碼來響應事件,如鼠標點擊事件或按鍵事件。同時,你還會看到如何處理基本的GUI元素,如按鈕和麵闆。
第12章詳細討論Swing GUI工具包。Swing工具包允許建立跨平颱的圖像用戶界麵。在這裏你會瞭解各種按鈕、文本組件、邊框、滑塊、列錶框、菜單以及對話框的有關內容。不過,一些更高級的組件會在捲II中討論。
第13章介紹如何將程序部署為應用或applet。在這裏我們會描述如何將程序打包在JAR文件中,以及如何使用Java Web Start和applet機製在Internet上發布應用。另外還會解釋Java程序部署之後如何存儲和獲取配置信息。
第14章是本書的最後一章,這一章將討論並發,並發能夠讓程序任務並行執行。在當今這個時代,大多數處理器都有多個內核,你往往希望這些內核都在工作,並發是Java技術的一個重要而且令人振奮的應用。
附錄列齣瞭Java語言的保留字。
約定
本書使用以下圖標錶示特殊內容。
注釋:“注釋”信息會用這樣的“注釋”圖標標誌。
提示:“提示”信息會用這樣的“提示”圖標標誌。
警告:對於可能齣現的危險,我們用一個“警告”圖標做齣警示。
C++注釋:在本書中有許多用來解釋Java與C++之間差彆的C++注釋。對於沒有C++程序設計背景,或者不擅長C++程序設計、把它當做一場噩夢不願再想起的程序員來說,可以跳過這些注釋。
Java提供瞭一個很大的程序設計庫,即應用程序編程接口。第一次使用API調用時,我們會在該節的結尾給齣一個概要描述。這些描述十分通俗易懂,希望能夠比聯機API文檔提供更多的信息。類、接口或方法名後麵的編號是介紹該特性的JDK版本號,如下例所示:
應用程序編程接口1.2
程序(源代碼見本書網站)以程序清單形式給齣,例如:
程序清單1-1 InputTest/InputTest.java
示例代碼
本書網站http://horstmann.com/corejava以壓縮的形式提供瞭書中的所有示例代碼。可以用熟悉的解壓縮程序或者用Java開發包中的jar實用程序解壓這個文件。有關安裝Java開發包和示例代碼的詳細信息請參看第2章。
緻 謝
寫一本書需要投入大量的精力,改寫一本書也並不像想象的那樣輕鬆,尤其是Java技術一直在持續不斷地更新。編著一本書讓很多人耗費瞭很多心血,在此衷心地感謝《Java核心技術》編寫小組的每一位成員。
Prentice Hall公司的許多人提供瞭非常有價值的幫助,卻甘願做幕後英雄。在此,我希望每一位都能夠知道我對他們努力的感恩。與以往一樣,我要真誠地感謝我的編輯,Prentice Hall公司的Greg Doench,從本書的寫作到齣版他一直在給予我們指導,同時感謝那些不知其姓名的為本書做齣貢獻的幕後人士。非常感謝Julie Nahil在圖書製作方麵給予的支持,還要感謝Dmitry Kirsanov和Alina Kirsanova完成手稿的編輯和排版工作。我還要感謝早期版本中我的閤作者,Gary Cornell,他已經轉嚮其他的事業。
感謝早期版本的許多讀者,他們指齣瞭許多令人尷尬的錯誤並給齣瞭許多具有建設性的修改意見。我還要特彆感謝本書優秀的審閱小組,他們仔細地審閱我的手稿,使本書減少瞭許多錯誤。
本書及早期版本的審閱專傢包括:Chuck Allison (Utah Valley大學)、Lance Andersen (Oracle)、Paul Anderson (Anderson Software Group)、Alec Beaton (IBM)、Cliff Berg、Andrew Binstock (Oracle)、Joshua Bloch、David Brown、Corky Cartwright、Frank Cohen (PushToTest)、Chris Crane (devXsolution)、Dr. Nicholas J. De Lillo (Manhattan學院)、Rakesh Dhoopar (Oracle)、David Geary (Clarity Training)、Jim Gish (Oracle)、Brian Goetz (Oracle)、Angela Gordon、Dan Gordon (Electric Cloud)、Rob Gordon、John Gray (Hartford大學)、Cameron Gregory (olabs.com)、Marty Hall (coreservlets.com公司)、Vincent Hardy (Adobe Systems)、Dan Harkey (San Jose州立大學)、William Higgins (IBM)、Vladimir Ivanovic (PointBase)、Jerry Jackson (CA Technologies)、Tim Kimmet (Walmart)、Chris Laffra、Charlie Lai (Apple)、Angelika Langer、Doug Langston、Hang Lau (McGill大學)、Mark Lawrence、Doug Lea (SUNY Oswego)、Gregory Longshore、Bob Lynch (Lynch Associates)、Philip Milne (consultant)、Mark Morrissey (Oregon研究院)、Mahesh Neelakanta (Florida Atlantic大學)、Hao Pham、Paul Philion、Blake Ragsdell、Stuart Reges (Arizona大學)、Rich Rosen (Interactive Data Corporation)、Peter Sanders (法國尼斯ESSI大學)、Dr. Paul Sanghera (San Jose州立大學Brooks學院)、Paul Sevinc (Teamup AG)、Devang Shah (Sun Microsystems)、Yoshiki Shibata、Bradley A. Smith、Steven Stelting (Oracle)、Christopher Taylor、Luke Taylor (Valtech)、George Thiruvathukal、Kim Topley (StreamingEdge)、Janet Traub、Paul Tyma (consultant)、Peter van der Linden、Christian Ullenboom、Burt Walsh、Dan Xu (Oracle)和John Zavgren (Oracle)。
Cay Horstmann
2015年11月於瑞士比爾