本書是《瘋狂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實戰演義》的所有項目代碼,這些項目可以作為本書課后練習題的非標準答案。如果讀者需要獲取關于課后練習題的解決方法、編程思路,可關注瘋狂講義微信服務號,加入讀者微信群后,與作者及本書龐大的讀者群相互交流。
《向上生長》九邊|北大信科教授齊薦
1)作者提供用于學習交流的微信群。
2)贈圖書配套代碼、 Java面試題真題、 PPT課件。
3)《瘋狂Java講義》歷時十年沉淀,現已升級到第6版,基于Java 17更新,覆蓋Java 8,11。經過無數Java學習者的反復驗證,被包括北京大學在內的大量985、211高校的優秀教師引薦為參考資料、選作教材。
4)《瘋狂Java講義》曾翻譯為中文繁體字版,在寶島臺灣上市發行。
5)《瘋狂Java講義》屢獲殊榮,多次獲取電子工業出版社的暢銷圖書長銷圖書獎項,作者本人也多次獲得優秀作者稱號。僅第3版一版的印量即達9萬多冊。
6)介紹新知識時,通過巧妙的類比,將未知事物與已知事物進行類比,降低讀者的學習難度;對于一些復雜、易于混淆的語法,本書還歸納了瑯瑯上口的口訣,比如方法重寫的口訣,能讓讀者快速掌握Java的核心語法,并加深記憶。
7)《瘋狂Java講義》不是一本翻譯而來的Java圖書,書中不會有任何生僻、晦澀的翻譯詞匯,有的只是淺顯、易懂的表達;符合中國人思維習慣、學習方式,更適合中國人學習Java。
第12章 Swing編程
12.1 Swing概述
12.2 Swing基本組件的用法
12.2.1 Swing組件層次
12.2.2 AWT組件的Swing實現
為什么單擊Swing多行文本域時不是彈出像AWT多行文本域中那樣的右鍵菜單?
12.2.3 為組件設置邊框
12.2.4 Swing組件的雙緩沖和鍵盤驅動
12.2.5 使用JToolBar創建工具條
12.2.6 使用JColorChooser和JFileChooser
12.2.7 使用JOptionPane
12.3 Swing中的特殊容器
12.3.1 使用JSplitPane
12.3.2 使用JTabbedPane
12.3.3 使用JLayeredPane、JDesktopPane和JInternalFrame
12.4 Swing簡化的拖放功能
12.5 Java 7新增的Swing功能
12.5.1 使用JLayer裝飾組件
12.5.2 創建透明的、不規則形狀窗口
12.6 使用JProgressBar、ProgressMonitor和BoundedRangeModel創建進度條
12.6.1 創建進度條
12.6.2 使用ProgressMonitor創建進度對話框
12.7 使用JSlider和BoundedRangeModel創建滑動條
12.8 使用JSpinner和SpinnerModel創建微調控制器
12.9 使用JList、JComboBox創建列表框
12.9.1 簡單列表框
12.9.2 不強制存儲列表項的ListModel和ComboBoxModel
12.9.3 強制存儲列表項的DefaultListModel和 DefaultComboBoxModel
為什么JComboBox提供了添加、刪除列表項的方法,而JList沒有提供添加、刪除列表項的方法呢?
12.9.4 使用ListCellRenderer改變列表項外觀
12.10 使用JTree和TreeModel創建樹
12.10.1 創建樹
12.10.2 拖動、編輯樹節點
12.10.3 監聽節點事件
12.10.4 使用DefaultTreeCellRenderer改變節點外觀
12.10.5 擴展DefaultTreeCellRenderer改變節點外觀
12.10.6 實現TreeCellRenderer改變節點外觀
12.11 使用JTable和TableModel創建表格
12.11.1 創建表格
我們指定的表格數據、表格列標題都是Object類型的數組,JTable如何顯示這些Object對象?
12.11.2 TableModel和監聽器
12.11.3 TableColumnModel和監聽器
12.11.4 實現排序
12.11.5 繪制單元格內容
12.11.6 編輯單元格內容
12.12 使用JFormattedTextField和JTextPane創建格式文本
12.12.1 監聽Document的變化
12.12.2 使用JPasswordField
12.12.3 使用JFormattedTextField
12.12.4 使用JEditorPane
12.12.5 使用JTextPane
12.13 本章小結
本章練習
第13章 MySQL數據庫與JDBC編程
13.1 JDBC基礎
13.1.1 JDBC簡介
13.1.2 JDBC驅動程序
13.2 SQL語法
13.2.1 安裝數據庫
13.2.2 關系數據庫的基本概念和MySQL基本命令
13.2.3 SQL語句基礎
13.2.4 DDL語句
13.2.5 數據庫約束
13.2.6 索引
13.2.7 視圖
13.2.8 DML語句
13.2.9 單表查詢
13.2.10 數據庫函數
13.2.11 分組和組函數
13.2.12 多表連接查詢
13.2.13 子查詢
13.2.14 集合運算
13.3 JDBC的典型用法
13.3.1 JDBC 4.2常用接口和類簡介
13.3.2 JDBC編程步驟
前面給出的僅僅是MySQL和Oracle兩種數據庫的驅動,我看不出驅動類字符串有什么規律啊!如果我希望使用其他數據庫,那怎么找到其他數據庫的驅動類呢?
13.4 執行SQL語句的方式
13.4.1 使用executeLargeUpdate方法執行DDL語句和DML語句
13.4.2 使用execute方法執行SQL語句
13.4.3 使用PreparedStatement執行SQL語句
13.4.4 使用CallableStatement調用存儲過程
13.5 管理結果集
13.5.1 可滾動、可更新的結果集
13.5.2 處理Blob類型數據
13.5.3 使用ResultSetMetaData分析結果集
13.6 使用RowSet 1.1包裝結果集
13.6.1 RowSetFactory與RowSet
13.6.2 離線RowSet
13.6.3 離線RowSet的查詢分頁
13.7 事務處理
13.7.1 事務的概念和MySQL事務支持
13.7.2 JDBC的事務支持
13.7.3 使用批量更新
13.8 分析數據庫信息
13.8.1 使用DatabaseMetaData分析數據庫信息
13.8.2 使用系統表分析數據庫信息
13.8.3 選擇合適的分析方式
13.9 使用連接池管理連接
13.9.1 DBCP2數據源
13.9.2 C3P0數據源
13.10 本章小結
本章練習
第14章 注解
14.1 基本注解
14.1.1 限定重寫父類的方法:@Override
14.1.2 Java 9增強的@Deprecated
14.1.3 抑制編譯器警告:@SuppressWarnings
14.1.4 堆污染警告與Java 9增強的@SafeVarargs
14.1.5 函數式接口與@FunctionalInterface
14.2 JDK的元注解
14.2.1 使用@Retention
14.2.2 使用@Target
14.2.3 使用@Documented
14.2.4 使用@Inherited
14.3 自定義注解
14.3.1 定義注解
14.3.2 提取注解信息
14.3.3 注解使用示例
14.3.4 重復注解
14.3.5 類型注解
14.4 編譯時處理注解
14.5 本章小結
第15章 輸入/輸出
15.1 File類
15.1.1 訪問文件和目錄
15.1.2 文件過濾器
15.2 理解Java的IO流
15.2.1 流的分類
15.2.2 流的概念模型
15.3 字節流和字符流
15.3.1 InputStream和Reader
15.3.2 OutputStream和Writer
15.4 輸入/輸出流體系
15.4.1 處理流的用法
15.4.2 輸入/輸出流的類體系
15.4.3 轉換流
怎么沒有把字符流轉換成字節流的轉換流呢?
15.4.4 推回輸入流
15.5 重定向標準輸入/輸出
15.6 Java虛擬機讀/寫其他進程的數據
15.7 RandomAccessFile
15.8 對象序列化
15.8.1 序列化的含義和意義
15.8.2 使用對象流實現序列化
15.8.3 對象引用的序列化
15.8.4 對序列化數據執行過濾
15.8.5 自定義序列化
15.8.6 另一種自定義序列化機制
15.8.7 版本
15.9 NIO
15.9.1 Java NIO概述
15.9.2 使用Buffer
15.9.3 使用Channel
15.9.4 字符集和Charset
二進制序列與字符之間如何對應呢?
15.9.5 文件鎖
15.10 NIO.2的功能和用法
15.10.1 Path、Paths和Files核心API
15.10.2 使用FileVisitor遍歷文件和目錄
15.10.3 使用WatchService監聽文件的變化
15.10.4 訪問文件屬性
15.11 本章小結
本章練習
第16章 多線程
16.1 線程概述
16.1.1 線程和進程
16.1.2 多線程的優勢
16.2 線程的創建和啟動
16.2.1 通過繼承Thread類創建線程類
16.2.2 通過實現Runnable接口創建線程類
16.2.3 使用Callable和Future創建線程
16.2.4 創建線程的三種方式對比
16.3 線程的生命周期
16.3.1 新建和就緒狀態
16.3.2 運行和阻塞狀態
16.3.3 線程死亡
16.4 控制線程
16.4.1 join線程
16.4.2 后臺線程
16.4.3 線程睡眠
16.4.4 改變線程優先級
16.5 線程同步
16.5.1 線程安全問題
16.5.2 同步代碼塊
16.5.3 同步方法
16.5.4 釋放對同步監視器的鎖定
16.5.5 同步鎖
16.5.6 死鎖及常用處理策略
16.6 線程通信
16.6.1 傳統的線程通信
16.6.2 使用Condition控制線程通信
16.6.3 使用BlockingQueue(阻塞隊列)控制線程通信
16.7 線程組和未處理異常
16.8 線程池
16.8.1 使用線程池管理線程
16.8.2 使用ForkJoinPool利用多CPU
16.9 線程相關類
16.9.1 ThreadLocal類
16.9.2 包裝線程不安全的集合
16.9.3 線程安全的集合類
16.9.4 使用Flow類實現發布-訂閱
16.10 CompletableFuture的功能和用法
16.10.1 獲取單任務的結果或異常
16.10.2 單任務消費
16.10.3 雙任務組合
16.10.4 多任務組合
16.11 本章小結
本章練習
第17章 網絡編程
17.1 網絡編程的基礎知識
17.1.1 網絡基礎知識
17.1.2 IP地址和端口
17.2 Java的基本網絡支持
17.2.1 使用InetAddress
17.2.2 使用URLDecoder和URLEncoder
17.2.3 URL、URLConnection和URLPermission
17.3 基于TCP協議的網絡編程
17.3.1 TCP協議基礎
17.3.2 使用ServerSocket創建TCP服務器端
17.3.3 使用Socket進行通信
17.3.4 加入多線程
17.3.5 記錄用戶信息
17.3.6 半關閉的Socket
17.3.7 使用NIO實現非阻塞式Socket通信
17.3.8 使用AIO實現非阻塞式通信
上面程序中好像沒用到④⑤號代碼的get()方法的返回值,在這兩個地方不調用get()方法行嗎?
17.3.9 Java 17新增的Unix domain socket
17.4 基于UDP協議的網絡編程
17.4.1 UDP協議基礎
17.4.2 使用DatagramSocket發送和接收數據
17.4.3 使用JDK 17的DatagramSocket實現多點廣播
17.5 使用代理服務器
17.5.1 直接使用Proxy創建連接
17.5.2 使用ProxySelector自動選擇代理服務器
17.6 使用HTTP Client進行網絡通信
17.6.1 發送同步GET請求
17.6.2 發送帶請求體的請求
17.6.3 發送異步請求
17.6.4 WebSocket客戶端支持
17.6.5 基于WebSocket的多人實時聊天
17.7 本章小結
本章練習
第18章 類加載機制與反射
18.1 類的加載、連接和初始化
18.1.1 JVM和類
18.1.2 類的加載
18.1.3 類的連接
18.1.4 類的初始化