瘋狂Java講義(第6版)(上冊)

李剛

  • 出版商: 電子工業
  • 出版日期: 2023-01-01
  • 定價: $828
  • 售價: 8.5$704
  • 語言: 簡體中文
  • 頁數: 512
  • ISBN: 7121447533
  • ISBN-13: 9787121447532
  • 相關分類: Java 程式語言
  • 立即出貨 (庫存 < 4)

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

相關主題

商品描述

本書是《瘋狂Java講義》第6版的上冊,第6版保持了前5版系統、全面、講解淺顯、細致的特性,全面新增介紹了Java 12到Java 17的新特性。《瘋狂Java講義》第6版深入介紹了Java編程的相關方面,上、下冊內容覆蓋了Java的基本語法結構、Java的面向對象特徵、Java集合框架體系、Java泛型、異常處理、Java GUI編程、JDBC數據庫編程、Java註釋、Java的IO流體系、Java多線程編程、Java網絡通信編程和Java反射機制,覆蓋了java.lang、java.util、java.text、java.io和java.nio、java.sql、java.awt、javax.swing包下絕大部分的類和接口。第6版重點介紹了Java的模塊化系統,還詳細介紹了Java 12到Java 17引入的塊字符串,instanceof的模式匹配,增強型switch語句、switch表達式及模式匹配,密封類,Record類,以及Java 12到Java 17新增的各種API功能。與前5版類似,第6版並不單純地從知識角度來講解Java,而是從解決問題的角度來介紹Java語言,所以涉及大量實用案例開發:五子棋游戲、梭哈游戲、仿QQ的游戲大廳、MySQL企業管理器、仿EditPlus的文本編輯器、多線程、斷點下載工具、Spring框架的IoC容器……這些案例既能讓讀者鞏固每章所學的知識,又可以讓讀者學以致用,激發編程自豪感,進而引爆內心的編程激情。第6版相關資料包中包含書中所有示例的代碼和《瘋狂Java實戰演義》的所有項目代碼,這些項目可以作為本書課後練習題的“非標準答案”。如果讀者需要獲取關於課後練習題的解決方法、編程思路,可關註“瘋狂講義”微信服務號,加入讀者微信群後,與作者及本書龐大的讀者群相互交流。《瘋狂Java講義》為所有打算深入掌握Java編程的讀者而編寫,適合各種層次的Java學習者和工作者閱讀,也適合作為大專院校、培訓機構的Java教材。

目錄大綱

第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
不是說JVM是運行Java程序的虛擬機嗎?那JRE和JVM的關系是怎樣的呢?
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 理解數組:數組也是一種類型
int[]是一種數據類型嗎?怎麽使用這種類型呢?
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.13中灰色覆蓋的數組元素再次指向另一個數組?這樣不就可以擴展成三維數組,甚至擴展成更多維的數組嗎?
4.6.5 操作數組的工具類:Arrays
4.6.6 數組應用舉例
4.7 本章小結
本章練習
第5章 面向對象(上)
5.1 類和對象
5.1.1 定義類
構造器不是沒有返回值嗎?為什麽不能用void聲明呢?
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 構造器重載
為什麽要用this來調用另一個重載的構造器?我把另一個構造器中的代碼復制到這個構造器中不就可以了嗎?
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 實現接口的枚舉類
枚舉類不是用final修飾了嗎?怎麽還能派生子類呢?
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類
hashCode()方法對於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佈局管理器
BorderLayout最多只能放置5個組件嗎?那它也太不實用了吧?
11.3.3 GridLayout佈局管理器
11.3.4 GridBagLayout佈局管理器
11.3.5 CardLayout佈局管理器
11.3.6 絕對定位
11.3.7 BoxLayout佈局管理器
圖11.15和圖11.16顯示的所有按鈕都緊挨在一起,如果希望像FlowLayout、GridLayout等佈局管理器那樣指定組件的間距應該怎麽辦?
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 本章小結
本章練習