瘋狂Java講義(第6版)(下冊) ( 簡體 字) |
作者:李剛 | 類別:1. -> 程式設計 -> JAVA -> Java |
譯者: |
出版社:電子工業出版社 | 3dWoo書號: 56218 詢問書籍請說出此書號!【有庫存】 NT售價: 595 元 |
出版日:2/1/2023 |
頁數:472 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787121449246 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:2021年9月14日,Oracle如約發布了Java 17正式版,并宣布從Java 17開始正式免費,Java邁入新時代。正如Oracle之前承諾的,Java不再基于功能特征來發布新版本,而是改為基于時間來發布新版本:固定每半年發布一個版本,但每3年才發布一個長期支持版(LTS),其他所有版本將被稱為“功能性版本”。“功能性版本”都只有6個月的維護期,相當于技術極客反饋的過渡版,不推薦在企業項目中使用。
因此,Java 17才是上一個LTS版(Java 11)之后最新的LTS版。
雖然目前有些企業可能還在使用早期的Java 8、Java 11,但Spring Boot 3.0已經官宣只支持Java 17,因此建議廣大開發者盡快過渡到Java 17。
為了向廣大工作者、學習者介紹最新、最前沿的Java知識,在Java 17正式發布之前,筆者就已經深入研究過Java 12到Java 17絕大部分可能新增的功能;當Java 17正式發布之后,筆者在第一時間開始了《瘋狂Java講義》(第5版)的升級:使用Java 17改寫了全書所有程序,全面介紹了Java 17的各種新特性。
在以“瘋狂Java體系”圖書為教材的瘋狂軟件教育中心,經常有學生詢問:為什么叫瘋狂Java這個名字?也有一些讀者通過網絡、郵件來詢問這個問題。其實這個問題的答案可以在本書第1版的前言中找到。瘋狂的本質是一種“享受編程”的狀態。在一些不了解編程的人看來,編程的人總面對著電腦,在鍵盤上敲打,這種生活實在太枯燥了。有這種想法的人并未真正了解編程,并未真正走進編程。在外人眼中:程序員不過是在敲打鍵盤;但在程序員心中:程序員敲出的每個字符,都是程序的一部分。
程序是什么呢?程序是對現實世界的數字化模擬。開發一個程序,實際是創造一個或大或小的“模擬世界”。在這個過程中,程序員享受著“創造”的樂趣,程序員沉醉在他所創造的“模擬世界”里:瘋狂地設計、瘋狂地編碼實現。實現過程不斷地遇到問題,然后解決它們;不斷地發現程序的缺陷,然后重新設計、修復它們——這個過程本身就是一種享受。一旦完全沉浸到編程世界里,程序員是“物我兩忘”的,眼中看到的、心中想到的,只有他正在創造的“模擬世界”。
在學會享受編程之前,編程學習者都應該采用“案例驅動”的方式,學習者需要明白程序的作用是:解決問題——如果你的程序不能解決你自己的問題,如何期望你的程序去解決別人的問題呢?那你的程序的價值何在?知道一個知識點能解決什么問題,才去學這個知識點,而不是盲目學習!因此,本書強調編程實戰,強調以項目激發編程興趣。
僅僅看完這本書,你不會成為高手!在編程領域里,沒有所謂的“武林秘籍”,再好的書一定要配合大量練習,否則書里的知識依然屬于作者,而讀者則仿佛身入寶山而一無所獲的笨漢。本書配置了大量高強度的練習題,希望讀者強迫自己去完成這些項目。這些練習題的答案可以參考本書相關資料包中《瘋狂Java實戰演義》的配套代碼。如果需要獲得編程思路和交流,可以關注“瘋狂講義”微信服務號,加群后與廣大讀者和筆者交流。
在《瘋狂Java講義》前5版面市的十多年時間里,無數讀者已經通過本書步入了Java編程世界,而且銷量不斷攀升,這說明“青山遮不住”,優秀的作品,經過時間的沉淀,往往歷久彌新。再次衷心感謝廣大讀者的支持,你們的認同和支持是筆者堅持創作的最大動力。
《瘋狂Java講義》(第3版)的優秀,也吸引了中國臺灣地區的讀者,因此中國臺灣地區的出版社成功引進并出版了繁體中文版的《瘋狂Java講義》,相信繁體版的《瘋狂Java講義》能更好地服務于中國臺灣地區的Java學習者。
廣大讀者對瘋狂Java的肯定、認同、贊譽,既讓筆者十分欣慰,也鞭策筆者以更高的熱情、更嚴謹的方式創作圖書。時至今日,每次筆者創作或升級圖書時,總有一種誠惶誠恐、如履薄冰的感覺,唯恐辜負廣大讀者的厚愛。
筆者非常歡迎所有熱愛編程、愿意推動中國軟件業發展的學習者、工作者對本書提出寶貴的意見,非常樂意與大家交流。中國軟件業還處于發展階段,所有熱愛編程、愿意推動中國軟件業發展的人應該聯合起來,共同為中國軟件行業貢獻自己的綿薄之力。
本書有什么特點
本書并不是一本簡單的Java入門教材,也不是一本“閉門造車”式的Java讀物。本書來自筆者十余年的Java培訓和研發經歷,凝結了筆者一萬余小時的授課經驗,總結了數千名Java學員學習過程中的典型錯誤。
因此,《瘋狂Java講義》具有如下三個特點。
1.案例驅動,引爆編程激情
《瘋狂Java講義》不是知識點的鋪陳,而是致力于將知識點融入實際項目的開發中,所以其中涉及了大量Java案例:仿QQ的游戲大廳、MySQL企業管理器、仿EditPlus的文本編輯器、多線程、斷點下載工具……希望讀者通過編寫這些程序找到編程的樂趣。
2.再現李剛老師課堂氛圍
《瘋狂Java講義》的內容是筆者十余年授課經歷的總結,知識體系取自瘋狂Java實戰的課程體系。書中內容力求再現筆者的課堂氛圍:以淺顯的比喻代替乏味的講解,以瘋狂實戰代替空洞的理論。
本書中包含了大量“注意”“學生提問”部分,這些正是數千名Java學員所犯錯誤的匯總。
3.注釋詳細,輕松上手
為了降低讀者閱讀的難度,書中代碼的注釋非常詳細,幾乎每兩三行代碼就有一行注釋。不僅如此,本書甚至還把一些簡單理論作為注釋穿插到代碼中,力求讓讀者能輕松上手。
本書所有程序中的關鍵代碼均以粗體字標出,這是為了幫助讀者迅速找到這些程序的關鍵點。
本書寫給誰看
如果你僅僅想對Java有所涉獵,那么本書并不適合你;如果你想全面掌握Java語言,并使用Java來解決問題、開發項目,或者希望以Java編程作為你的職業,那么《瘋狂Java講義》將非常適合你。希望本書能引爆你內心潛在的編程激情,如果本書能讓你產生廢寢忘食的感覺,那筆者就非常欣慰了。 |
內容簡介:本書是《瘋狂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實戰演義》的所有項目代碼,這些項目可以作為本書課后練習題的“非標準答案”。如果讀者需要獲取關于課后練習題的解決方法、編程思路,可關注“瘋狂講義”微信服務號,加入讀者微信群后,與作者及本書龐大的讀者群相互交流。 |
目錄:第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 類的初始化
18.1.5 類初始化的時機
18.2 類加載器
18.2.1 類加載機制
18.2.2 創建并使用自定義的類加載器
18.2.3 URLClassLoader類
18.3 通過反射查看類信息
18.3.1 獲得Class對象
18.3.2 從Class中獲取信息
18.3.3 方法參數反射
18.4 使用反射生成并操作對象
18.4.1 創建對象
18.4.2 調用方法
18.4.3 訪問成員變量的值
18.4.4 操作數組
18.4.5 嵌套訪問權限
18.5 使用反射生成JDK動態代理
18.5.1 使用Proxy和InvocationHandler 創建動態代理
18.5.2 動態代理和AOP
18.5.3 Java 17新增的invokeDefault方法
18.6 反射和泛型
18.6.1 泛型和Class類
18.6.2 使用反射來獲取泛型信息
18.7 本章小結
本章練習
附錄A Java模塊化系統 |
序: |