
內容簡介
本書是布魯斯 • 埃克爾時隔 15 年,繼 Thinking in Java 之後又一力作,基於 Java 的 3 個長期支持版(Java 8、11、17),講解 Java 核心語法,並對 Java 的核心變化進行詳述。全書內容通俗易懂,配合示例講解逐步深入,並結合實際開發需要,從語言底層設計出發,有效幫讀者規避一些常見的開發陷阱。
主體部分共 22 章,內容包含對象、操作符、控製流、初始化和清理、複用、多態、接口、內部類、集合、函數式編程、流、異常、代碼校驗、文件、字符串、泛型等。
本書適合各個層次的 Java 開發者閱讀,同時也可作為麵向對象程序設計語言以及 Java 語言的參考教材。
作者簡介
Bruce Eckel ,C++標準委員會的創始成員之一,知名技術顧問 ,專注於編程語言和軟件係統設計方麵的研究,常活躍於世界各大頂級技術研討會。他自1986年以來,累計出版Thinking in C++、Thinking in Java、On Java 8等十餘部經典計算機著作,曾多次榮獲Jolt 最佳圖書獎(“被譽為軟件業界的奧斯卡”),其代表作 Thinking in Java被譯為中、日、俄、意、波蘭、韓等十幾種語言,在世界範圍內產生廣泛影響。
目錄
第1章什麼是對象1.1抽象的歷程
1.2對象具有接口
1.3對象可以提供服務
1.4隱藏的實現
1.5複用實現
1.6繼承
1.7多態
1.8單根層次結構
1.9集合
1.10對象的創建和生命周期
1.11異常處理
1.12總結
第2章安裝Java和本書示例
2.1編輯器
2.2shell
2.2.1運行shell
2.2.2目錄(文件夾)
2.2.3shell基礎操作
2.3安裝Java
2.4確認安裝成功
2.5安裝和運行本書示例
第3章對象無處不在
3.1通過引用操作對象
3.2必須創建所有對象
3.2.1數據保存在哪裏
3.2.2特殊情況:基本類型
3.2.3Java中的數組
3.3注釋
3.4無須銷毀對象
3.4.1作用域
3.4.2對象的作用域
3.5使用class關鍵字創建新類型
3.6方法、參數以及返回值
3.7編寫Java程序
3.7.1名稱可見性
3.7.2使用其他組件
3.7.3static關鍵字
3.8你的第一個Java程序
3.9編程風格
3.10總結
第4章操作符
4.1使用Java操作符
4.2優先級
4.3賦值
4.4算術操作符
4.5自動遞增和自動遞減
4.6關係操作符
4.7邏輯操作符
4.8字麵量
4.8.1字麵量裏的下劃線
4.8.2科學記數法(又稱“指數記數法”)
4.9按位操作符
4.10移位操作符
4.11三元操作符
4.12字符串操作符+和+=
4.13使用操作符時常犯的錯誤
4.14類型轉換操作符
4.14.1截尾和舍入
4.14.2提升
4.15Java沒有sizeof()
4.16操作符小結
4.17總結
第5章控製流
5.1true和false
5.2if-else
5.3迭代語句
5.3.1do-while
5.3.2for
5.3.3逗號操作符
5.4for-in語法
5.5return
5.6break和continue
5.7臭名昭著的goto
5.8switch
5.9字符串作為選擇器
5.10總結
第6章初始化和清理
6.1用構造器保證初始化
6.2方法重載
6.2.1區分重載的方法
6.2.2使用基本類型的重載
6.2.3通過返回值區分重載方法
6.3無參構造器
6.4this關鍵字
6.4.1在構造器中調用構造器
6.4.2static的含義
6.5清理:終結和垃圾收集
6.5.1finalize()的作用
6.5.2你必須執行清理
6.5.3終止條件
6.5.4垃圾收集器的工作原理
6.6成員初始化
6.7構造器初始化
6.7.1初始化順序
6.7.2靜態數據的初始化
6.7.3顯式的靜態初始化
6.7.4非靜態實例初始化
6.8數組初始化
6.8.1動態數組創建
6.8.2可變參數列表
6.9枚舉類型
6.10新特性:局部變量類型推斷
6.11總結
第7章實現隱藏
7.1package:庫單元
7.1.1代碼組織
7.1.2創建獨一無二的包名
7.1.3定製工具庫
7.1.4用import來改變行為
7.1.5關於包的忠告
7.2Java訪問權限修飾符
7.2.1包訪問
7.2.2public:接口訪問權限
7.2.3private:你無法訪問它
7.2.4protected:繼承訪問權限
7.2.5包訪問權限與公共構造器
7.3接口和實現
7.4類的訪問權限
7.5新特性:模塊
7.6總結
第8章複用
8.1組合語法
8.2繼承語法
8.3委托
8.4組合與繼承相結合
8.4.1確保正確的清理
8.4.2名稱隱藏
8.5選擇組合還是繼承
8.6protected關鍵字
8.7向上轉型
8.8final關鍵字
8.8.1final數據
8.8.2final方法
8.8.3final類
8.8.4關於final的忠告
8.9初始化及類的加載
8.10總結
第9章多態
9.1再論向上轉型
9.2難點
9.2.1方法調用綁定
9.2.2產生正確的行為
9.2.3可擴展性
9.2.4陷阱:“重寫”private方法
9.2.5陷阱:字段與靜態方法
9.3構造器和多態
9.3.1構造器的調用順序
9.3.2繼承與清理
9.3.3構造器內部的多態方法行為
9.4協變返回類型
9.5用繼承進行設計
第10章接口
10.1抽象類和抽象方法
10.2接口定義
10.2.1默認方法
10.2.2多重繼承
10.2.3接口中的靜態方法
10.2.4作為接口的Instrument
10.3抽象類與接口
10.4完全解耦
10.5組合多個接口
10.6通過繼承來擴展接口
10.7適配接口
10.8接口中的字段
10.9嵌套接口
10.10接口和工廠
10.11新特性:接口的private方法
10.12新特性:密封類和密封接口
10.13總結
第11章內部類
11.1創建內部類
11.2到外部類的鏈接
11.3使用.this和.new
11.4內部類和向上轉型
11.5在方法和作用域中的內部類
11.6匿名內部類
11.7嵌套類
11.7.1接口中的類
11.7.2從多層嵌套的內部類中訪問外部成員
11.8為什麼需要內部類
11.8.1閉包與回調
11.8.2內部類與控製框架
11.9繼承內部類
11.10內部類可以被重寫嗎
11.11局部內部類
11.12內部類標識符
11.13總結
第12章集合
12.1泛型和類型安全的集合
12.2基本概念
12.3添加一組元素
12.4打印集合
12.5List
12.6Iterator
12.7LinkedList
12.8Stack
12.9Set
12.10Map
12.11新特性:記錄(record)類型
12.12Queue
12.13Collection和Iterator的對比
12.14for-in和迭代器
12.15總結
第13章函數式編程
13.1舊方式與新方式
13.2lambda表達式
13.3方法引用
13.3.1Runnable
13.3.2未綁定方法引用
13.3.3構造器方法引用
13.4函數式接口
13.4.1帶有更多參數的函數式接口
13.4.2解決缺乏基本類型函數式接口的問題
13.5高階函數
13.6閉包
13.7函數組合
13.8柯裏化和部分求值
13.9純函數式編程
13.10總結
第14章流
14.1Java8對流的支持
14.2流的創建
14.2.1隨機數流
14.2.2int類型的區間範圍
14.2.3generate()
14.2.4iterate()
14.2.5流生成器
14.2.6Arrays
14.2.7正則表達式
14.3中間操作
14.3.1跟蹤與調試
14.3.2對流元素進行排序
14.3.3移除元素
14.3.4將函數應用於每個流元素
14.3.5在應用map()期間組合流
14.4Optional類型
14.4.1便捷函數
14.4.2創建Optional
14.4.3Optional對象上的操作
14.4.4由Optional組成的流
14.5終結操作
14.5.1將流轉換為一個數組
14.5.2在每個流元素上應用某個終結操作
14.5.3收集操作
14.5.4組合所有的流元素
14.5.5匹配
14.5.6選擇一個元素
14.5.7獲得流相關的信息
14.6小結
第15章異常
15.1概念
15.2基本的異常
15.3捕捉異常
15.3.1try塊
15.3.2異常處理程序
15.4創建自己的異常
15.5異常說明
15.6捕捉任何異常
15.6.1多重捕捉
15.6.2棧軌跡
15.6.3重新拋出異常
15.6.4異常鏈
15.7標準Java異常
15.8新特性:更好的NullPointerException報告機製
15.9使用finally執行清理
15.9.1finally是幹什麼用的
15.9.2在return期間使用finally
15.9.3缺陷:異常丟失
15.10異常的約束
15.11構造器
15.12try-with-resources語句
15.12.1細節揭秘
15.12.2新特性:try-withresources中的實際上的最終變量
15.13異常匹配
15.14其他可選方式
15.14.1歷史
15.14.2觀點
15.14.3把異常傳遞到控製台
15.14.4將“檢查型異常”轉換為“非檢查型異常”
15.15異常使用指南
15.16小結
附記異常的奇異世界
第16章代碼校驗
16.1測試
16.1.1單元測試
16.1.2測試覆蓋率的幻覺
16.2前置條件
16.2.1斷言
16.2.2DbC+單元測試
16.2.3使用Guava裏的前置條件
16.3測試驅動開發
16.4日誌
16.5調試
16.5.1使用JDB進行調試
16.5.2圖形調試器
16.6基準測試
16.6.1微基準測試
16.6.2介紹JMH
16.7分析與優化
16.8樣式檢查
16.9靜態錯誤分析
16.10代碼審查
16.11結對編程
16.12重構
16.13持續集成
16.14總結
第17章文件
17.1文件和目錄路徑
17.1.1選擇Path的片段
17.1.2分析Path
17.1.3添加或刪除路徑片段
17.2目錄
17.3文件係統
17.4監聽Path
17.5查找文件
17.6讀寫文件
17.7小結
第18章字符串
18.1不可變的字符串
18.2重載+與StringBuilder
18.3無意識的遞歸
18.4對字符串的操作
18.5格式化輸出
18.5.1printf()
18.5.2System.out.format()
18.5.3Formatter類
18.5.4格式說明符
18.5.5Formatter轉換
18.5.6String.format()
18.6新特性:文本塊
18.7正則表達式
18.7.1基礎
18.7.2創建正則表達式
18.7.3量詞
18.7.4Pattern和Matcher
18.7.5split()
18.7.6替換操作
18.7.7reset()
18.7.8正則表達式和JavaI/O
18.8掃描輸入
18.8.1Scanner分隔符
18.8.2使用正則表達式掃描
18.9StringTokenizer
18.10總結
第19章反射
19.1為什麼需要反射
19.2Class對象
19.2.1類字麵量
19.2.2泛型類的引用
19.2.3cast()方法
19.3轉型前檢查
19.3.1使用類字麵量
19.3.2動態的instanceof
19.4注冊工廠
19.5Instanceof與Class的等價性
19.6運行時的類信息
19.7動態代理
19.8使用Optional
19.8.1標簽接口
19.8.2模擬對象和樁
19.9接口和類型信息
19.10總結
第20章泛型
20.1和C++的對比
20.2簡單泛型
20.2.1元組庫
20.2.2棧類
20.2.3RandomList
20.3泛型接口
20.4泛型方法
20.4.1可變參數和泛型方法
20.4.2通用Supplier
20.4.3簡化元組的使用
20.4.4Set實用工具
20.5構建複雜模型
20.6類型擦除的奧秘
20.6.1C++的實現方法
20.6.2遷移的兼容性
20.6.3類型擦除存在的問題
20.6.4邊界的行為
20.7對類型擦除的補償
20.7.1創建類型實例
20.7.2泛型數組
20.8邊界
20.9通配符
20.9.1編譯器有多聰明?
20.9.2逆變性
20.9.3無界通配符
20.9.4捕獲轉換
20.10問題
20.10.1基本類型不可作為類型參數
20.10.2實現參數化接口
20.10.3類型轉換和警告
20.10.4重載
20.10.5基類會劫持接口
20.11自限定類型
20.11.1奇異遞歸泛型
20.11.2自限定
20.11.3參數協變性
20.12動態類型安全
20.13異常
20.14混型
20.14.1C++中的混型
20.14.2與接口混合
20.14.3使用裝飾器模式
20.14.4與動態代理混合
20.15潛在類型機製20.15.1Python中的潛在類型機製
20.15.2C++中的潛在類型機製
20.15.3Go中的潛在類型機製
20.15.4Java中的直接潛在類型機製
20.16對於缺少(直接的)潛在類型機製的補償
20.16.1反射
20.16.2將方法應用於序列
20.17Java8中的輔助潛在類型機製
20.18總結:轉型真的這麼糟糕嗎?
第21章數組
21.1數組為何特殊
21.2數組是一等對象
21.3返回數組
21.4多維數組
21.5數組和泛型
21.6Arrays.fill()
21.7Arrays.setAll()
21.8增量生成器
21.9隨機數生成器
21.10泛型和基本類型數組
21.11修改已有的數組元素
21.12關於數組並行
21.12.1策略
21.12.2parallelSetAll()
21.13數組實用工具
21.14數組複製
21.15數組比較
21.16流和數組
21.17數組排序
21.17.1使用Arrays.sort()
21.17.2並行排序
21.18用Arrays.binarySearch()進行二分查找
21.19用parallelPrefix()進行累積計算
21.20總結/806
附錄A補充內容
附錄B積極看待C++與Java的遺產
······
最後修改:2024 年 10 月 23 日
© 允許規範轉載
