圖書目錄
第1章 Java語言概述與開發環境
1.1 Java語言的發展簡史
1.2 Java程式運行機制
1.2.1 高級語言的運行機制
1.2.2 Java程式的運行機制和JVM
1.3 開發Java程式的準備
1.3.1 下載和安裝Java 17的JDK
1.3.2 JDK 17增強的安裝器與PATH環境變數
1.4 第一個Java程式
1.4.1 編輯Java原始碼
1.4.2 編譯Java程式
當編譯C程式時,不僅需要指定存放目標檔案的位置,而且需要指定目標檔案的檔案名稱,這裡使用javac編譯Java程式時怎么不需要指定目標檔案的檔案名稱呢
1.4.3 運行Java程式
1.4.4 根據CLASSPATH環境變數定位類
1.5 Java程式的基本規則
1.5.1 Java程式的組織形式
1.5.2 Java源檔案的命名規則
1.5.3 初學者容易犯的錯誤
1.6 互動式工具:jshell
1.7 Java 17改進的垃圾回收器
1.8 何時開始使用IDE工具
我想學習Java編程,到底是學習Eclipse好,還是學習IntelliJ IDEA好呢
1.9 本章小結
本章練習
第2章 理解面向對象
2.1 面向對象
2.1.1 結構化程式設計簡介
2.1.2 程式的三種基本結構
2.1.3 面向對象程式設計簡介
2.1.4 面向對象的基本特徵
2.2 UML介紹
2.2.1 用例圖
2.2.2 類圖
2.2.3 組件圖
2.2.4 部署圖
2.2.5 順序圖
2.2.6 活動圖
2.2.7 狀態機圖
2.3 Java的面向對象特徵
2.3.1 一切都是對象
2.3.2 類和對象
2.4 本章小結
第3章 數據類型和運算符
3.1 注釋
3.1.1 單行注釋和多行注釋
3.1.2 文檔注釋
API文檔是什麼?
為什麼要學習查看API文檔的方法
3.2 變數與數據類型分類
3.3 標識符和關鍵字
3.3.1 分隔設定
3.3.2 標識符規則
3.3.3 Java關鍵字
3.4 基本數據類型
3.4.1 整型
3.4.2 字元型
什麼是字元集
3.4.3 浮點型
3.4.4 在數值中使用下畫線分隔
3.4.5 布爾型
3.4.6 使用var定義變數
3.5 基本類型的類型轉換
3.5.1 自動類型轉換
3.5.2 強制類型轉換
3.5.3 表達式類型的自動提升
3.6 直接量
3.6.1 直接量的類型
3.6.2 直接量的賦值
3.6.3 Java 17增加的塊字元串
3.7 運算符
3.7.1 算術運算符
3.7.2 賦值運算符
3.7.3 位運算符
3.7.4 擴展後的賦值運算符
3.7.5 比較運算符
3.7.6 邏輯運算符
3.7.7 三目運算符
3.7.8 運算符的結合性和優先權
3.8 本章小結
本章練習
第4章 流程控制與數組
4.1 順序結構
4.2 分支結構
4.2.1 if條件語句
4.2.2 傳統switch分支語句
4.2.3 Java 17的新式switch語句
4.2.4 Java 17新增的switch表達式
4.3 循環結構
4.3.1 while循環語句
4.3.2 do while循環語句
4.3.3 for循環
4.3.4 嵌套循環
4.4 控制循環結構
4.4.1 使用break結束循環
4.4.2 使用continue忽略本次循環剩下的語句
4.4.3 使用return結束方法
4.5 數組類型
4.5.1 理解數組:數組也是一種類型
4.5.2 定義數組
4.5.3 數組的初始化
能不能只分配記憶體空間,不賦初始值呢
4.5.4 使用數組
為什麼要記住這些異常信息
4.5.5 foreach循環
4.6 深入數組
4.6.1 記憶體中的數組
為什麼有棧記憶體和堆記憶體之分
4.6.2 基本類型數組的初始化
4.6.3 引用類型數組的初始化
4.6.4 沒有多維數組
4.6.5 運算元組的工具類:Arrays
4.6.6 數組套用舉例
4.7 本章小結
本章練習
第5章 面向對象(上)
5.1 類和對象
5.1.1 定義類
5.1.2 對象的產生和使用
5.1.3 對象、引用和指針
5.1.4 對象的this引用
5.2 方法詳解
5.2.1 方法的所屬性
5.2.2 方法的參數傳遞機制
5.2.3 形參個數可變的方法
5.2.4 遞歸方法
5.2.5 方法重載
為什麼方法的返回值類型不能用於區分重載的方法
5.3 成員變數和局部變數
5.3.1 成員變數和局部變數分類
5.3.2 成員變數的初始化和記憶體中的運行機制
5.3.3 局部變數的初始化和記憶體中的運行機制
5.3.4 變數的使用規則
5.4 隱藏和封裝
5.4.1 理解封裝
5.4.2 使用訪問控制符
5.4.3 package、import和import static
5.4.4 Java的常用包
5.5 深入構造器
5.5.1 使用構造器執行初始化
構造器是創建Java對象的途徑,是不是說構造器完全負責創建Java對象
5.5.2 構造器重載
5.6 類的繼承
5.6.1 繼承的特點
5.6.2 重寫父類的方法
5.6.3 super限定
5.6.4 調用父類構造器
為什麼我在創建Java對象時從未感覺到java.lang.Object類的構造器被調用過
5.7 多態
5.7.1 多態性
5.7.2 引用變數的強制類型轉換
5.7.3 instanceof運算符
5.7.4 Java 17為instanceof增加的模式匹配
5.7.5 Java 17為switch增加的模式匹配
5.8 繼承與組合
5.8.1 使用繼承的注意點
5.8.2 利用組合實現復用
當使用組合關係實現復用時,需要創建兩個Animal對象,這是不是意味著使用組合關係時系統開銷更大
5.9 初始化塊
5.9.1 使用初始化塊
5.9.2 實例初始化塊和構造器
5.9.3 類初始化塊
5.10 本章小結
本章練習
第6章 面向對象(下)
6.1 包裝類
Java為什麼要對這些數據進行快取呢
6.2 處理對象
6.2.1 列印對象和toString方法
6.2.2 ==和equals方法
上面程式中在判斷obj是否為Person類的實例時,為何不用obj instanceof Person來判斷呢
6.3 類成員
6.3.1 理解類成員
6.3.2 單例類
6.4 final修飾符
6.4.1 final成員變數
6.4.2 final局部變數
6.4.3 使用final修飾基本類型變數和引用類型變數的區別
6.4.4 可執行“宏替換”的final變數
6.4.5 final方法
6.4.6 final類
6.4.7 不可變類
6.4.8 快取實例的不可變類
6.5 抽象類
6.5.1 抽象方法和抽象類
6.5.2 抽象類的作用
6.6 改進後的接口
6.6.1 接口的概念
6.6.2 改進後的接口定義
6.6.3 接口的繼承
6.6.4 使用接口
6.6.5 接口和抽象類
6.6.6 面向接口編程
6.7 內部類
6.7.1 Java 17改進的非靜態內部類
非靜態內部類對象和外部類對象的關係是怎樣的
6.7.2 靜態內部類
6.7.3 使用內部類
既然內部類是外部類的成員,那么是否可以為外部類定義子類,在子類中再定義一個內部類來重寫其父類中的內部類呢
6.7.4 局部內部類
6.7.5 匿名內部類
6.8 Lambda表達式
6.8.1 Lambda表達式入門
6.8.2 Lambda表達式與函式式接口
6.8.3 在Lambda表達式中使用var
6.8.4 方法引用與構造器引用
6.8.5 Lambda表達式與匿名內部類的聯繫和區別
6.8.6 使用Lambda表達式調用Arrays的類方法
6.9 枚舉類
6.9.1 手動實現枚舉類
6.9.2 枚舉類入門
6.9.3 枚舉類的成員變數、方法和構造器
6.9.4 實現接口的枚舉類
6.9.5 包含抽象方法的枚舉類
6.10 Java 17引入的密封類
6.10.1 密封類與其子類
6.10.2 密封類與類型轉換
6.10.3 密封接口
6.10.4 密封類與switch模式匹配
6.11 Java 17引入的Record類
6.11.1 Record類入門
6.11.2 Record類的構造器
6.11.3 局部Record類
6.12 對象與垃圾回收
6.12.1 對象在記憶體中的狀態
6.12.2 強制垃圾回收
6.12.3 finalize方法
6.12.4 對象的軟引用、弱引用和虛引用
6.13 修飾符的適用範圍
6.14 多版本JAR包
6.14.1 jar命令詳解
6.14.2 創建可執行的JAR包
6.14.3 關於JAR包的技巧
6.15 本章小結
本章練習
第7章 Java基礎類庫
7.1 與用戶互動
7.1.1 運行Java程式的參數
7.1.2 使用Scanner獲取鍵盤輸入
7.2 系統相關類
7.2.1 Java 17增強的System類
7.2.2 Runtime類與ProcessHandle
7.3 常用類
7.3.1 Object類
7.3.2 操作對象的Objects工具類
7.3.3 使用Optional操作可空值
7.3.4 String、StringBuffer和StringBuilder類
7.3.5 Math類
7.3.6 ThreadLocalRandom與Random
7.3.7 BigDecimal類
7.4 日期、時間類
7.4.1 Date類
7.4.2 Calendar類
7.4.3 Java 17增強的新式日期、時間包
7.5 正則表達式
7.5.1 創建正則表達式
7.5.2 使用正則表達式
7.6 變數處理和方法處理
7.6.1 使用MethodHandle動態調用方法
7.6.2 使用VarHandle動態操作變數
7.7 國際化與格式化
7.7.1 Java國際化的思路
7.7.2 Java支持的國家和語言
7.7.3 完成程式國際化
7.7.4 使用MessageFormat處理包含占位符的字元串
7.7.5 使用類檔案代替資源檔案
7.7.6 Java的新式日誌API
7.7.7 Java 17增強的NumberFormat
7.7.8 使用JDK 17新增的HexFormat處理十六進制數
7.7.9 使用DateFormat格式化日期、時間
7.7.10 使用SimpleDateFormat格式化日期
7.8 Java 17增強的日期、時間格式器
7.8.1 使用DateTimeFormatter完成格式化
7.8.2 使用DateTimeFormatter解析字元串
7.9 本章小結
本章練習
第8章 Java集合
8.1 Java集合概述
8.2 Collection和Iterator接口
8.2.1 使用Lambda表達式遍歷集合
8.2.2 使用Iterator遍歷集合元素
8.2.3 使用Lambda表達式遍歷Iterator
8.2.4 使用foreach循環遍歷集合元素
8.2.5 使用Predicate操作集合
8.2.6 使用Stream操作集合
8.3 Set集合
8.3.1 HashSet類
8.3.2 LinkedHashSet類
8.3.3 TreeSet類
8.3.4 EnumSet類
8.3.5 各Set實現類的性能分析
8.4 List集合
8.4.1 改進的List接口和ListIterator接口
8.4.2 ArrayList和Vector實現類
8.4.3 固定長度的List
8.5 Queue集合
8.5.1 PriorityQueue實現類
8.5.2 Deque接口與ArrayDeque實現類
8.5.3 LinkedList實現類
8.5.4 各種線性表的性能分析
8.6 Map集合
8.6.1 與Lambda表達式相關的Map方法
8.6.2 改進的HashMap和Hashtable實現類
8.6.3 LinkedHashMap實現類
8.6.4 使用Properties讀/寫屬性檔案
8.6.5 Java 17增強的TreeMap實現類
8.6.6 WeakHashMap實現類
8.6.7 IdentityHashMap實現類
8.6.8 EnumMap實現類
8.6.9 各Map實現類的性能分析
8.7 HashSet和HashMap的性能選項
8.8 操作集合的工具類:Collections
8.8.1 排序操作
8.8.2 查找、替換操作
8.8.3 同步控制
8.8.4 設定不可變集合
8.8.5 新式的不可變集合
8.9 煩瑣的接口:Enumeration
8.10 本章小結
本章練習
第9章 泛型
9.1 泛型入門
9.1.1 在編譯時不檢查類型導致的異常
9.1.2 使用泛型
9.1.3 “菱形”語法
9.2 深入泛型
9.2.1 定義泛型接口、泛型類
9.2.2 從泛型類派生子類
9.2.3 並不存在泛型類
9.3 類型通配符
9.3.1 使用類型通配符
9.3.2 設定類型通配符的上限
9.3.3 設定類型通配符的下限
9.3.4 設定泛型形參的上限
9.4 泛型方法
9.4.1 定義泛型方法
9.4.2 泛型方法和類型通配符的區別
9.4.3 “菱形”語法與泛型構造器
9.4.4 泛型方法與方法重載
9.4.5 類型推斷
9.5 擦除和轉換
9.6 泛型與數組
9.7 本章小結
第10章 異常處理
10.1 異常概述
10.2 異常處理機制
10.2.1 使用try...catch捕捉異常
10.2.2 異常類的繼承體系
10.2.3 多異常捕捉
10.2.4 訪問異常信息
10.2.5 使用finally回收資源
10.2.6 異常處理的嵌套
10.2.7 自動關閉資源的try語句
10.3 Checked異常和Runtime異常體系
10.3.1 使用throws聲明拋出異常
10.3.2 方法重寫時聲明拋出異常的限制
10.4 使用throw拋出異常
10.4.1 拋出異常
10.4.2 自定義異常類
10.4.3 catch和throw同時使用
10.4.4 使用throw語句拋出異常
10.4.5 異常鏈
10.5 Java的異常跟蹤棧
10.6 異常處理規則
10.6.1 不要過度使用異常
10.6.2 不要使用過於龐大的try塊
10.6.3 避免使用Catch All語句
10.6.4 不要忽略捕捉到的異常
10.7 本章小結
本章練習
第11章 AWT編程
11.1 GUI和AWT
11.2 AWT容器
11.3 布局管理器
11.3.1 FlowLayout布局管理器
11.3.2 BorderLayout布局管理器
11.3.3 GridLayout布局管理器
11.3.4 GridBagLayout布局管理器
11.3.5 CardLayout布局管理器
11.3.6 絕對定位
11.3.7 BoxLayout布局管理器
11.4 AWT常用組件
11.4.1 基本組件
11.4.2 對話框
11.5 事件處理
11.5.1 Java事件模型的流程
11.5.2 事件和事件監聽器
11.5.3 事件適配器
11.5.4 使用內部類實現事件監聽器
11.5.5 使用外部類實現事件監聽器
11.5.6 類本身作為事件監聽器類
11.5.7 使用匿名內部類或Lambda表達式實現事件監聽器
11.6 AWT選單
11.6.1 選單條、選單和選單項
11.6.2 右鍵選單
為什麼即使沒有給多行文本域編寫右鍵選單,但是當我在多行文本域上單擊右鍵時也一樣會彈出右鍵選單
11.7 在AWT中繪圖
11.7.1 畫圖的實現原理
11.7.2 使用Graphics類
11.8 處理點陣圖
11.8.1 Image抽象類和BufferedImage實現類
11.8.2 使用ImageIO讀/寫點陣圖
11.9 剪貼簿
11.9.1 數據傳遞的類和接口
11.9.2 傳遞文本
11.9.3 使用系統剪貼簿傳遞圖像
11.9.4 使用本地剪貼簿傳遞對象引用
11.9.5 通過系統剪貼簿傳遞Java對象
11.10 拖放功能
11.10.1 拖放目標
11.10.2 拖放源
11.11 本章小結
本章練習
作者簡介
李剛,十餘年軟體開發從業經驗,瘋狂軟體教育中心教學總監。瘋狂Java實訓營創始人,瘋狂Java體系原創圖書作者。CSDN爆款課程講師。培訓的學生已在騰訊、阿里、華為、IBM、網易等名企就職。國內知名高端IT技術圖書作家,已出版《瘋狂Java講義》《瘋狂Spring Boot終極講義》《瘋狂Android講義》《輕量級Java EE企業套用實戰》《瘋狂前端開發講義》《瘋狂HTML5/CSS3/講義》等著作。其中瘋狂Java體系圖書均已沉澱多年,贏得極高的市場認同,多次重印,多部著作印刷數量超過10萬冊,並被多所“985”“211”院校選作教材,部分圖書以繁體中文版,授權到寶島台灣。