Java 核心技術 -- 卷I,開發基礎, 12/e Core Java, Volume I: Fundamentals, 12e

Cay S.Horstmann 譯 林琪,蘇鈺涵

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

商品描述

伴隨著Java的成長,《Java核心技術》從第1版到第11版一路走來,
得到了廣大Java程序設計人員的青睞,成為一本暢銷不衰的Java經典圖書。

本書經全面修訂,以涵蓋Java 17的新特性。
新版延續之前版本的優良傳統,用數百個實際的工程案例,
全面系統地講解了Java語言的核心概念、語法、 重要特性、 開發方法。

著力讓讀者在充分理解Java語言和Java類庫的基礎上,靈活應用Java提供的高級特性,
具體包括面向對象程序設計、反射與代理、接口與內部類、異常處理、
泛型程序設計、集合框架、事件監聽器模型、圖形用戶界面設計和並發。

全書共12章,為你指明Java的學習路徑:
☉第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 應用涉及的所有基礎知識和 Java 特性,還會幫助你掌握開發 Java 程序所需的全部基本技能。
相信在學習Java的道路上有了本書的輔助,你的學習一定可以做到事半功倍。

作者簡介

Cay S. Horstmann
美國聖何塞州立大學計算機科學系教授、Java技術的堅定倡導者、
國際計算機協會(ACM)計算機教育貢獻傑出會士,
常年在國際上的各類計算機峰會上進行技術分享,為矽谷輸送計算機專業人才30餘年。
他是《Java核心技術》兩卷本的作者,並著有Core Java SE 9 for the Impatient, Second Edition(Addison-Wesley, 2018)
和Scala for the Impatient, Second Edition(Addison- Wesley, 2017)。
他還為專業程序員和計算機科學專業的學生撰寫過數十本其他圖書。

目錄大綱

譯者序
前言
致謝
第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  13
2.1.3 安裝源文件和文檔  15
2.2 使用命令行工具  15
2.3 使用集成開發環境  19
2.4 JShell  22
第3章 Java的基本程序設計結構  25
3.1 一個簡單的Java程序  25
3.2 註釋  28
3.3 數據類型  28
3.3.1 整型  29
3.3.2 浮點類型  30
3.3.3 char類型  31
3.3.4 Unicode和char類型  31
3.3.5 boolean類型  32
3.4 變量與常量  33
3.4.1 聲明變量  33
3.4.2 初始化變量  34
3.4.3 常量  35
3.4.4 枚舉類型  35
3.5 運算符  36
3.5.1 算術運算符  36
3.5.2 數學函數與常量  36
3.5.3 數值類型之間的轉換  38
3.5.4 強制類型轉換  39
3.5.5 賦值  39
3.5.6 自增與自減運算符  40
3.5.7 關係和boolean運算符  40
3.5.8 條件運算符  41
3.5.9 switch表達式  41
3.5.10 位運算符  42
3.5.11 括號與運算符級別  43
3.6 字符串  44
3.6.1 子串  44
3.6.2 拼接  44
3.6.3 字符串不可變  45
3.6.4 檢測字符串是否相等  46
3.6.5 空串與Null串  47
3.6.6 碼點與代碼單元  47
3.6.7 String API  49
3.6.8 閱讀聯機API文檔  51
3.6.9 構建字符串  53
3.6.10 文本塊  54
3.7 輸入與輸出  56
3.7.1 讀取輸入  56
3.7.2 格式化輸出  58
3.7.3 文件輸入與輸出  60
3.8 控制流程  62
3.8.1 塊作用域  62
3.8.2 條件語句  63
3.8.3 循環  64
3.8.4 確定性循環  68
3.8.5 多重選擇:switch語句  71
3.8.6 中斷控制流程的語句  75
3.9 大數  77
3.10 數組  79
3.10.1 聲明數組  79
3.10.2 訪問數組元素  81
3.10.3 for each循環  81
3.10.4 數組拷貝  82
3.10.5 命令行參數  83
3.10.6 數組排序  84
3.10.7 多維數組  86
3.10.8 不規則數組  89
第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 更改器方法與訪問器方法  101
4.3 自定義類  104
4.3.1 Employee類  104
4.3.2 使用多個源文件  106
4.3.3 剖析Employee類  107
4.3.4 從構造器開始  108
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 f?inal實例字段  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 方法參數  120
4.6 對象構造  125
4.6.1 重載  126
4.6.2 默認字段初始化  126
4.6.3 無參數的構造器  126
4.6.4 顯式字段初始化  127
4.6.5 參數名  128
4.6.6 調用另一個構造器  129
4.6.7 初始化塊  129
4.6.8 對象析構與f?inalize方法  133
4.7 記錄  134
4.7.1 記錄概念  134
4.7.2 構造器:標準、自定義和簡潔  136
4.8 包  138
4.8.1 包名  138
4.8.2 類的導入  138
4.8.3 靜態導入  140
4.8.4 在包中增加類  140
4.8.5 包訪問  143
4.8.6 類路徑  144
4.8.7 設置類路徑  146
4.9 JAR文件  146
4.9.1 創建JAR文件  146
4.9.2 清單文件  147
4.9.3 可執行JAR文件  148
4.9.4 多版本JAR文件  149
4.9.5 關於命令行選項的說明  150
4.10 文檔註釋  151
4.10.1 註釋的插入  151
4.10.2 類註釋  152
4.10.3 方法註釋  152
4.10.4 字段註釋  153
4.10.5 通用註釋  153
4.10.6 包註釋  154
4.10.7 註釋提取  154
4.11 類設計技巧  155
第5章 繼承  158
5.1 類、超類和子類  158
5.1.1 定義子類  158
5.1.2 覆蓋方法  160
5.1.3 子類構造器  161
5.1.4 繼承層次結構  165
5.1.5 多態  165
5.1.6 理解方法調用  166
5.1.7 阻止繼承:f?inal類和方法  169
5.1.8 強制類型轉換  170
5.1.9 instanceof模式匹配  172
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 類型化與原始數組列表的兼容性  192
5.4 對象包裝器與自動裝箱  193
5.5 參數個數可變的方法  196
5.6 抽像類  197
5.7 枚舉類  201
5.8 密封類  203
5.9 反射  208
5.9.1 Class類  209
5.9.2 聲明異常入門  211
5.9.3 資源  212
5.9.4 利用反射分析類的能力  213
5.9.5 使用反射在運行時分析對象  220
5.9.6 使用反射編寫泛型數組代碼  224
5.9.7 調用任意方法和構造器  227
5.10 繼承的設計技巧  231
第6章 接口、lambda表達式與內部類  233
6.1 接口  233
6.1.1 接口的概念  233
6.1.2 接口的屬性  239
6.1.3 接口與抽像類  240
6.1.4 靜態和私有方法  241
6.1.5 默認方法  241
6.1.6 解決默認方法衝突  242
6.1.7 接口與回調  244
6.1.8 Comparator接口  246
6.1.9 對象克隆  247
6.2 lambda表達式  252
6.2.1 為什麼引入lambda表達式  253
6.2.2 lambda表達式的語法  254
6.2.3 函數式接口  256
6.2.4 方法引用  258
6.2.5 構造器引用  260
6.2.6 變量作用域  261
6.2.7 處理lambda表達式  263
6.2.8 再談Comparator  266
6.3 內部類  267
6.3.1 使用內部類訪問對象狀態  267
6.3.2 內部類的特殊語法規則  270
6.3.3 內部類是否有用、必要和安全  271
6.3.4 局部內部類  273
6.3.5 由外部方法訪問變量  274
6.3.6 匿名內部類  275
6.3.7 靜態內部類  278
6.4 服務加載器  281
6.5 代理  283
6.5.1 何時使用代理  284
6.5.2 創建代理對象  284
6.5.3 代理類的特性  288
第7章 異常、斷言和日誌  290
7.1 處理錯誤  290
7.1.1 異常分類  291
7.1.2 聲明檢查型異常  293
7.1.3 如何拋出異常  295
7.1.4 創建異常類  296
7.2 捕獲異常  297
7.2.1 捕獲異常概述  297
7.2.2 捕獲多個異常  299
7.2.3 再次拋出異常與異常鏈  300
7.2.4 f?inally子句  301
7.2.5 try-with-Resources語句  303
7.2.6 分析棧軌跡元素  305
7.3 使用異常的技巧  308
7.4 使用斷言  311
7.4.1 斷言的概念  312
7.4.2 啟用和禁用斷言  313
7.4.3 使用斷言完成參數檢查  313
7.4.4 使用斷言提供假設文檔  314
7.5 日誌  315
7.5.1 基本日誌  316
7.5.2 高級日誌  316
7.5.3 修改日誌管理器配置  318
7.5.4 本地化  320
7.5.5 處理器  321
7.5.6 過濾器  324
7.5.7 格式化器  324
7.5.8 日誌技巧  324
7.6 調試技巧  332
第8章 泛型程序設計  337
8.1 為什麼要使用泛型程序設計  337
8.1.1 類型參數的好處  337
8.1.2 誰想成為泛型程序員  338
8.2 定義簡單泛型類  339
8.3 泛型方法  341
8.4 類型變量的限定  342
8.5 泛型代碼和虛擬機  344
8.5.1 類型擦除  344
8.5.2 轉換泛型表達式  346
8.5.3 轉換泛型方法  346
8.5.4 調用遺留代碼  348
8.6 限制與局限性  349
8.6.1 不能用基本類型實例化類型參數  349
8.6.2 運行時類型查詢只適用於原始類型  349
8.6.3 不能創建參數化類型的數組  349
8.6.4 Varargs警告  350
8.6.5 不能實例化類型變量  351
8.6.6 不能構造泛型數組  352
8.6.7 泛型類的靜態上下文中類型變量無效  353
8.6.8 不能拋出或捕獲泛型類的實例  354
8.6.9 可以取消對檢查型異常的檢查  354
8.6.10 注意擦除後的衝突  356
8.7 泛型類型的繼承規則  357
8.8 通配符類型  359
8.8.1 通配符概念  359
8.8.2 通配符的超類型限定  360
8.8.3 無限定通配符  363
8.8.4 通配符捕獲  363
8.9 反射和泛型  365
8.9.1 泛型Class類  365
8.9.2 使用Class<T>參數進行類型匹配  366
8.9.3 虛擬機中的泛型類型信息  367
8.9.4 類型字面量  370
第9章 集合  376
9.1 Java集合框架  376
9.1.1 集合接口與實現分離  376
9.1.2 Collection接口  379
9.1.3 迭代器  379
9.1.4 泛型實用方法  382
9.2 集合框架中的接口  384
9.3 具體集合  386
9.3.1 鍊錶  387
9.3.2 數組列表  395
9.3.3 散列集  396
9.3.4 樹集  399
9.3.5 隊列與雙端隊列  403
9.3.6 優先隊列  404
9.4 映射  405
9.4.1 基本映射操作  405
9.4.2 更新映射條目  408
9.4.3 映射視圖  409
9.4.4 弱散列映射  411
9.4.5 鏈接散列集與映射  412
9.4.6 枚舉集與映射  413
9.4.7 標識散列映射  413
9.5 副本與視圖  415
9.5.1 小集合  415
9.5.2 不可修改的副本和視圖  417
9.5.3 子範圍  418
9.5.4 檢查型視圖  419
9.5.5 同步視圖  419
9.5.6 關於可選操作的說明  420
9.6 算法  423
9.6.1 為什麼使用泛型算法  423
9.6.2 排序與混排  424
9.6.3 二分查找  427
9.6.4 簡單算法  428
9.6.5 批操作  429
9.6.6 集合與數組的轉換  430
9.6.7 編寫自己的算法  431
9.7 遺留的集合  432
9.7.1 Hashtable類  432
9.7.2 枚舉  432
9.7.3 屬性映射  433
9.7.4 棧  436
9.7.5 位集  437
第10章 圖形用戶界面程序設計  441
10.1 Java用戶界面工具包簡史  441
10.2 顯示窗體  442
10.2.1 創建窗體  442
10.2.2 窗體屬性  444
10.3 在組件中顯示信息  448
10.3.1 處理2D圖形  452
10.3.2 使用顏色  458
10.3.3 使用字體  459
10.3.4 顯示圖像  465
10.4 事件處理  466
10.4.1 基本事件處理概念  466
10.4.2 實例:處理按鈕點擊事件  467
10.4.3 簡潔地指定監聽器  471
10.4.4 適配器類  472
10.4.5 動作  473
10.4.6 鼠標事件  478
10.4.7 AWT事件繼承層次結構  482
10.5 項API  485
第11章 Swing用戶界面組件  491
11.1 Swing和模型-視圖-控制器設計模式  491
11.2 佈局管理概述  495
11.2.1 佈局管理器  495
11.2.2 邊框佈局  497
11.2.3 網格佈局  498
11.3 文本輸入  499
11.3.1 文本域  499
11.3.2 標籤和標籤組件  501
11.3.3 密碼域  502
11.3.4 文本區  502
11.3.5 滾動窗格  503
11.4 選擇組件  505
11.4.1 複選框  506
11.4.2 單選按鈕  508
11.4.3 邊框  511
11.4.4 組合框  513
11.4.5 滑動條  516
11.5 菜單  522
11.5.1 菜單構建  522
11.5.2 菜單項中的圖標  524
11.5.3 複選框和單選按鈕菜單項  525
11.5.4 彈出菜單  526
11.5.5 鍵盤助記符和加速器  527
11.5.6 啟用和禁用菜單項  528
11.5.7 工具欄  532
11.5.8 工具提示  534
11.6 複雜的佈局管理  534
11.6.1 網格包佈局  535
11.6.2 定制佈局管理器  543
11.7 對話框  547
11.7.1 選項對話框  547
11.7.2 創建對話框  551
11.7.3 數據交換  554
11.7.4 文件對話框  560
第12章 並發  567
12.1 什麼是線程  567
12.2 線程狀態  572
12.2.1 新建線程  572
12.2.2 可運行線程  572
12.2.3 阻塞和等待線程  573
12.2.4 終止線程  573
12.3 線程屬性  575
12.3.1 中斷線程  575
12.3.2 守護線程  578
12.3.3 線程名  578
12.3.4 未捕獲異常的處理器  578
12.3.5 線程優先級  579
12.4 同步  580
12.4.1 競態條件的一個例子  580
12.4.2 競態條件詳解  582
12.4.3 鎖對象  584
12.4.4 條件對象  587
12.4.5 synchronized關鍵字  591
12.4.6 同步塊  595
12.4.7 監視器概念  597
12.4.8 volatile字段  597
12.4.9 f?inal變量  598
12.4.10 原子性  599
12.4.11 死鎖  600
12.4.12 為什麼廢棄stop和suspend方法  603
12.4.13 按需初始化  604
12.4.14 線程局部變量  605
12.5 線程安全的集合  606
12.5.1 阻塞隊列  607
12.5.2 高效的映射、集和隊列  612
12.5.3 映射條目的原子更新  614
12.5.4 並發散列映射的批操作  617
12.5.5 並發集視圖  618
12.5.6 寫時拷貝數組  619
12.5.7 並行數組算法  619
12.5.8 較早的線程安全集合  620
12.6 任務和線程池  621
12.6.1 Callable與Future  621
12.6.2 執行器  622
12.6.3 控制任務組  625
12.6.4 fork-join框架  630
12.7 異步計算  632
12.7.1 可完成Future  632
12.7.2 組合可完成Future  634
12.7.3 用戶界面回調中的長時間運行任務  639
12.8 進程  646
12.8.1 建立進程  646
12.8.2 運行進程  647
12.8.3 進程句柄  648
附錄 Java關鍵字  652