Java 核心技術 捲I : 基礎知識, 11/e (Core Java Volume I -- Fundamentals, 11/e)

[美] 凱·S.霍斯特曼(Cay S. Horstmann) 著

買這商品的人也買了...

商品描述

本書由擁有20多年教學與研究經驗的資深Java技術專家撰寫(獲Jolt大獎),是程序員的首選Java指南。本版針對Java SE 9、10和 11全面更新。

全書共12章。第1章概述Java語言的特色功能;第2章詳細論述如何下載和安裝JDK以及本書的程序示例;第3章開始討論Java 語言,包括變量、循環和簡單的函數;第4章介紹面向對象兩大基石中最重要的一個概念——封裝,以及Java語言實現封裝的機制,即類與方法;第5章介紹面向對象的另一個重要概念——繼承,繼承使程序員可以使用現有的類,並根據需要進行修改;第6章展示如何使用Java的接口(可幫助你充分獲得Java的完全面向對象程序設計能力)、lambda表達式(用來表述可以在以後某個時間點執行的代碼塊)和內部類;第7章討論異常處理,並給出大量實用的調試技巧;第8章概要介紹泛型程序設計,使程序更可讀、更安全;第9章討論Java平臺的集合框架,以及如何充分利用內建的標準集合;第10章介紹GUI程序設計(包括如何建立窗口、如何在窗口中繪圖、如何利用幾何圖形繪圖、如何採用多種字體格式化文本,以及如何顯示圖像)和編寫代碼來響應事件(如鼠標點擊事件和按鍵事件);第11章詳細討論Swing GUI工具包,以建立跨平臺的圖形用戶界面,包括各種按鈕、文本組件、邊框、滑塊、列表框、菜單以及對話框的有關內容;第12章討論並發。本書最後還有一個附錄,其中列出了Java語言的保留字。

本書是一本可以指導程序員編寫健壯且可維護代碼的經典教程和參考書。不論是使用Java SE 9、10還是11,本書都能幫助你深入理解這門語言及其API。書中提供了數百個示例程序,所有這些代碼都經過精心設計,不僅易於理解,也很容易實際應用。

這一版做了全面更新,特別是示例的更新,反映了人們期待已久的Java模塊化特性,為讀者展示瞭如何編寫更易於管理和演進的代碼。你會瞭解如何使用新的JShell的讀取-計算-打印循環(REPL)進行快捷且更具探索性的開發,以及應用Process API、競爭鎖定、日誌和編譯的重大改進。

在本捲中,作者全面深入地介紹了Java語言的基礎知識和UI編程,包括對象、泛型、集合、lambda表達式、Swing設計、並發和函數式編程。如果你是一個有經驗的程序員,正在轉向Java SE 9、10或11,要想獲得專家見解、解決方案和豐富的代碼,再沒有比這本書更好的資源了。

通過閱讀本書,你將:

 掌握編寫一流Java代碼的基本技術以及Java用法和最佳實踐
 充分利用接口、lambda表達式和內部類的強大功能
 通過有效的異常處理和調試使程序更堅固
 利用泛型編程編寫更安全、更可重用的代碼
 利用Java的標準集合改善性能和效率
 利用Swing工具包構建跨平臺GUI
 使用Java改進的並發特性充分利用多核處理器

要想瞭解有關Java SE 9、10和11的高級特性,包括企業特性、模塊系統、網絡、安全和高級UI編程,請參閱《Java核心技術 捲II 高級特性(原書第11版)》。

目錄大綱

譯者序
前言
致謝
第1章Java程序設計概述1
1.1 Java程序設計平台1
1.2 Java“白皮書”的關鍵術語2
1.2.1簡單性2
1.2.2面向對象3
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動態性6
1.3 Java applet與Internet 6
1.4 Java發展簡史7
1.5關於Java的常見誤解10
第2章Java程序設計環境12
2.1安裝Java開發工具包12
2.1.1下載JDK 12
2.1.2設置JDK 14
2.1.3安裝庫源文件和文檔16
2.2使用命令行工具16
2.3使用集成開發環境20
2.4 JShell 23
第3章Java的基本程序設計結構26
3.1一個簡單的Java應用程序26
3.2註釋29
3.3數據類型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數學函數與常量38
3.5.3數值類型之間的轉換40
3.5.4強制類型轉換41
3.5.5結合賦值和運算符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閱讀聯機API文檔51
3.6.9構建字符串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循環66
3.8.4確定循環69
3.8.5多重選擇:switch語句72
3.8.6中斷控制流程的語句74
3.9大數76
3.10數組79
3.10.1聲明數組79
3.10.2訪問數組元素80
3.10.3 for each循環81
3.10.4數組拷貝82
3.10.5命令行參數82
3.10.6數組排序83
3.10.7多維數組86
3.10.8不規則數組88
第4章對象與類92
4.1面向對象程序設計概述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從構造器開始107
4.3.5用var聲明局部變量109
4.3.6使用null引用109
4.3.7隱式參數與顯式參數110
4.3.8封裝的優點111
4.3.9基於類的訪問權限113
4.3.10私有方法114
4.3.11 final實例字段114
4.4靜態字段與靜態方法115
4.4.1靜態字段115
4.4.2靜態常量116
4.4. 3靜態方法116
4.4.4工廠方法117
4.4.5 main方法118
4.5方法參數121
4.6對象構造126
4.6.1重載126
4.6.2默認字段初始化127
4.6.3無參數的構造器127
4.6.4顯式字段初始化128
4.6.5參數名129
4.6.6調用另一個構造器129
4.6.7初始化塊130
4.6.8對象析構與finalize方法134
4.7包134
4.7.1包名134
4.7.2類的導入135
4.7.3靜態導入136
4.7.4在包中增加類137
4.7.5包訪問139
4.7.6類路徑140
4.7.7設置類路徑142
4.8 JAR文件143
4.8.1創建JAR文件143
4.8.2清單文件144
4.8.3可執行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子類構造器158
5.1.4繼承層次162
5.1.5多態162
5.1 .6理解方法調用163
5.1.7阻止繼承:final類和方法165
5.1.8強制類型轉換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泛型數組列表186
5.3.1聲明數組列表187
5.3.2訪問數組列表元素189
5.3.3類型化與原始數組列表的
兼容性191
5.4對象包裝器與自動裝箱192
5.5參數數量可變的方法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使用反射編寫泛型數組
代碼213
5.7.7調用任意方法和構造器216
5.8繼承的設計技巧219
第6章接口、lambda表達式與
內部類222
6.1接口222
6.1.1接口的概念222
6.1.2接口的屬性228
6.1.3接口與抽像類229
6.1.4靜態和私有方法230
6.1.5默認方法230
6.1.6解決默認方法衝突231
6.1.7接口與回調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函數式接口245
6.2 .4方法引用247
6.2.5構造器引用250
6.2.6變量作用域250
6.2.7處理lambda表達式252
6.2.8再談Comparator 254
6.3內部類255
6.3.1使用內部類訪問對象狀態256
6.3. 2內部類的特殊語法規則259
6.3.3內部類是否有用、必要和
安全260
6.3.4局部內部類262
6.3.5由外部方法訪問變量263
6.3.6匿名內部類264
6.3.7靜態內部類267
6.4服務加載器270
6.5代理273
6.5.1何時使用代理273
6.5.2創建代理對象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創建異常類285
7.2捕獲異常286
7.2.1捕獲異常286
7.2.2捕獲多個異常288
7.2.3再次拋出異常與異常鏈289
7.2.4 finally子句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使用斷言完成參數檢查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調試技巧321
第8章泛型程序設計326
8.1為什麼要使用泛型程序設計326
8.1.1類型參數的好處326
8.1.2誰想成為泛型程序員328
8.2定義簡單泛型類328
8.3泛型方法330
8.4類型變量的限定331
8.5泛型代碼和虛擬機333
8.5.1類型擦除333
8.5.2轉換泛型表達式335
8.5.3轉換泛型方法335
8.5.4調用遺留代碼337
8.6限制與局限性338
8.6.1不能用基本類型實例化類型參數338
8.6.2運行時類型查詢只適用於原始類型338
8.6.3不能創建參數化類型的數組338
8.6.4 Varargs警告339
8.6.5不能實例化類型變量340
8.6.6不能構造泛型數組341
8.6.7泛型類的靜態上下文中類型變量無效342
8.6 .8不能拋出或捕獲泛型類的實例343
8.6.9可以取消對檢查型異常的檢查343
8.6.10注意擦除後的衝突345
8.7泛型類型的繼承規則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參數進行類型匹配355
8.9 .3虛擬機中的泛型類型信息356
8.9.4類型字面量359
第9章集合365
9.1 Java集合框架365
9.1.1集合接口與實現分離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數組列表384
9.3.3散列集385
9.3.4樹集388
9.3.5隊列與雙端隊列391
9.3.6優先隊列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集合與數組的轉換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創建窗體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簡潔地指定監聽器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網格佈局484
11.3文本輸入485
11.3.1文本域486
11.3.2標籤和標籤組件487
11.3.3密碼域488
11.3.4文本區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菜單構建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網格包佈局520
11.6.2定制佈局管理器529
11.7對話框532
11.7.1選項對話框533
11.7.2創建對話框536
11.7.3數據交換540
11.7.4文件對話框545
第12章並發552
12.1什麼是線程552
12.2線程狀態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線程優先級563
12.4同步563
12.4.1競態條件的一個例子563
12.4.2競態條件詳解567
12.4.3鎖對象568
12.4.4條件對象571
12.4.5 synchronized關鍵字576
12.4.6同步塊579
12.4.7監視器概念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對並發散列映射的批操作599
12.5.5並發集視圖600
12.5.6寫數組的拷貝601
12.5.7並行數組算法601
12.5.8較早的線程安全集合602
12.6任務和線程池603
12.6.1 Callable與Future 603
12.6.2執行器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用戶界面回調中的長時間運行任務622
12.8進程628
12.8.1建立一個進程628
12.8.2運行一個進程630
12.8 .3進程句柄631
附錄Java關鍵字634