Java無難事——詳解Java編程核心思想與技術

孫鑫

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

商品描述

《Java無難事》讓你學習Java再無難事!本書系統地講解了Java開發人員需要掌握的核心知識。
本書按照中國人的思維習慣,由淺入深、循序漸進、引導式地帶領讀者快速掌握Java知識。
全書秉承作者一貫的寫作風格,對知識的講解讓你知其然且知其所以然。
全書語言通俗易懂、幽默風趣,內容安排上由淺入深,知識講解上深入淺出,為你節省腦細胞,輕鬆愉快地掌握Java知識。
看書累了,沒關係,還有視頻。
同步學習視頻並不是書中內容的重複,而是有力的補充和完善。
本書還講解了依賴注入(IoC/DI)容器、面向切面編程(AOP)、對象關係映射(ORM)框架的實現原理,
同時還給出了並發編程領域中經常用到的線程池的實現。

作者簡介

孫鑫

國內IT技術和教育專家,2009年中國教育傑出人物。
具有20多年的軟件開發和教育培訓經驗,精通多種程序語言和技術架構。
2004年曾推出“VC++深入編程”和“Java無難事”教學視頻,引起了強烈的反響,
在網絡上掀起了一股視頻教學的風潮,數十萬名學員通過這兩套視頻走上了軟件開發的道路。
作者從2006年開始,相繼出版了多本暢銷技術專著,包括《Java Web開發詳解》 《VC++深入詳解》
《Struts 2深入詳解》《Servlet/JSP深入詳解》《XML、XML Schema、XSLT 2.0和XQuery開發詳解》
《HTML5、CSS和JavaScript開發》《Vue.js從入門到實戰》。

目錄大綱

目錄
第1章Java初窺
1.1 Java的起源
1.2 Java能做什麼
1.3相關概念
1.3.1 JDK
1.3.2 Java家族的三個成員
1.3.3 Java 1、 Java 2和Java 5
1.3.4 JRE
1.4安裝JDK
1.4.1下載JDK 11(Java SE 11)
1.4.2安裝JDK
1.4.3下載幫助文檔
1.5 Java的特性
1.5.1簡單
1.5.2面向對象
1.5.3健壯
1.5.4安全
1.5.5結構中立
1.5.6可移植
1.5.7高性能
1.5. 8解釋執行
1.5.9平台無關
1.5.10多線程
1.5.11動態
1.6 Java跨平台的原理
1.6.1 Java源文件的編譯過程
1.6.2 Java解釋器運行機制
1.6.3 Java字節碼的執行方式
1.6.4理解JVM
1.7第一個程序
1.7.1了解JDK
1.7.2編寫第一個Java程序
1.8掃清Java征途中的兩塊絆腳石
1.8.1有用的PATH
1.8.2難纏的CLASSPATH
1.9交互式編程環境JShell
1. 10為Java程序打包
1.10.1 JAR文件
1.10.2將字節碼文件打包到JAR包中
1.10.3將目錄中所有文件打包到JAR文件中
1.10.4清單文件
1 .11總結
1.12實戰練習

2章初識Java語言
2.1標識符
2.2數據類型
2.2.1整數類型
2.2.2浮點類型
2.2.3字符(char)型
2.2.4布爾(boolean)型
2.2.5 String類型
2.3變量和字面常量
2.3.1變量
2.3.2字面常量
2.4類型轉換的奧秘
2.5運算符
2 .5.1賦值運算符
2.5.2自增和自減運算符
2.5.3算術運算符
2.5.4關係運算符
2.5.5布爾運算符
2.5.6位運算符
2.5.7移位運算符
2.5.8一元和二元運算符
2.5.9三元運算符
2.5.10優先級
2.6表達式與語句
2.7程序結構
2.7.1分支語句
2.7.2循環語句
2.8數組
2.8.1數組類型與聲明數組
2.8.2創建數組
2 .8.3使用數組
2.8.4匿名數組
2.8.5多維數組
2.8.6數組的初始值和越界
2.9分隔符
2.10註釋
2.10.1傳統註釋
2.10 .2 JavaDoc註釋
2.11 Java中的關鍵字
2.12總結
2.13實戰練習

第3章進入對象的世界
3.1面向對象思想
3.2對象的狀態和行為
3.2.1對像都有一組固定的行為
3.2.2注意思維習慣
3.3面向對象編程的難點
3.4 Java的類與對象
3.5字段(field)與方法
3.5.1字段
3.5.2方法
3.5.3方法的參數與返回值
3.6構造方法與new關鍵字
3.7方法重載
3.8特殊變量this
3.9關鍵字static
3.9.1靜態字段
3.9.2靜態方法
3.9.3 static語句塊
3.10常量
3.11枚舉(enum)
3.11.1原始的枚舉實現
3.11.2枚舉類型
3.11. 3枚舉值的比較
3.11.4自定義枚舉值
3.12總結
3.13實戰練習

第4章高級面向對象編程
4.1繼承
4.2方法的覆蓋(override)
4.3多態(polymorphism)
4.3.1何為多態
4.3.2多態的實際應用
4.3.3 Java編譯器如何實現多態
4.3.4類型轉換
4.3.5協變返回類型
4.3.6在構造方法中調用被覆蓋的方法
4.4特殊變量super
4.4.1訪問父類被子類覆蓋的方法或隱藏的變量
4.4.2調用父類構造方法
4.5封裝與private
4.6對外發布的接口――public
4.7再談final
4.7.1 final類
4.7.2 final方法
4.7. 3 final參數
4.8對象的銷毀
4.9面向對象的四個基本特性
4.10總結
4.11實戰練習

第5章包和訪問控制
5.1在包中的類
5.2導入類
5. 3靜態導入
5.4靜態導入枚舉類型
5.5訪問控制
5.5.1類的訪問說明符
5.5.2類成員的訪問說明符
5.6總結
5.7實戰練習

第6章抽象類與接口
6.1抽象方法和抽像類
6.2接口
6.3接口中的數據成員
6.4接口的繼承與實現
6.5接口的應用
6.6深入接口――通信雙方的協議
6. 7接口的默認方法和靜態方法
6.7.1默認方法
6.7.2靜態方法
6.8接口的私有方法
6.9總結
6.10實戰練習

第7章內部類(Inner Class)
7.1創建內部類
7.2訪問外部類
7.3內部類與接口
7.4局部內部類
7.5匿名內部類
7.5.1創建匿名內部類
7.5.2匿名內部類的構造方法
7.6靜態內部類
7.7內部類的繼承與覆蓋
7.7.1內部類的繼承
7.7.2內部類的覆蓋
7. 8內部類規則總結
7.9回調與事件機制
7.9.1回調(callback)
7.9.2事件(event)
7.10總結
7.11實戰練習

第8章異常處理
8.1什麼是異常
8.2捕獲異常
8.3使用finally進行清理
8.4拋出異常與聲明異常
8.5 RuntimeException
8.6創建自己的異常體系結構
8.7 try-with-resources
8.7.1自動關閉資源
8.7.2聲明多個資源
8.7.3 catch多個異常
8.7.4使用更具包容性的類型檢查重新拋出異常
8.8總結
8.9實戰練習

第9章深入字符串
9.1 String類
9.2 ==運算符與equals方法
9.3 compareTo方法
9.4字符串拼接
9.5操作字符串
9.5.1獲取字符串的長度
9.5.2查找字符或字符串
9.5.3判斷字符串的開始與結尾
9.5.4獲取指定索引位置的字符
9.5.5截取子字符串
9.5.6分割字符串
9.5.7替換字符或字符串
9.5.8合併字符串
9.5.9重複字符串
9.5.10大小寫轉換
9.5. 11去除字符串首尾空白
9.5.12判斷字符串是否為空
9.5.13提取字符串的行流
9.5.14與字節數組相互轉換
9.6 StringBuffer類和StringBuilder類
9.7格式化輸出
9.7.1格式說明符
9.7.2參數索引
9.7.3格式說明字符
9.7.4寬度和精度
9.7.5標誌字符
9.7.6生成格式化的String對象
9.8正則表達式
9.8.1正則表達式的優點
9.8.2一切從模式開始
9.8.3創建正則表達式
9.8.4量詞
9.8.5 String類的正則表達式方法
9.8.6 Pattern和Matcher
9.8.7郵件地址驗證
9.8.8獲取組匹配的內容
9.8.9替換字符串
9.9總結
9.10實戰練習

第10章Java應用
10.1再論引用類型
10.1.1引用類型――數組
10.1.2方法傳參
10.2操作數組
10.2.1數組的複制
10 .2.2數組的排序
10.2.3搜索數組中的元素
10.2.4填充數組
10.3基本數據類型與封裝類
10.3.1基本數據類型與封裝類對象的互相轉換
10. 3.2封裝類對象與字符串的互相轉換
10.3.3基本數據類型與字符串的互相轉換
10.3.4自動裝箱與拆箱
10.4對象的克隆
10.5國際化與本地化
10.5.1 Locale
10.5.2資源包
10.5.3消息格式化
10.6總結
10.7實戰練習

第11章泛型
11.1為什麼需要泛型
11.2泛型與基本數據類型
11.3泛型類中的數組
11.4元組
11.5泛型接口
11.5.1一個簡單的泛型接口
11.5.2匿名內部類實現泛型接口
11.5.3 map機制的實現
11.6泛型方法
11.6.1簡單的泛型方法
11.6.2完善映射機制的實現
11.7通配符類型
11.7.1通配符的子類型限定
11.7.2通配符的超類型限定
11.8類型參數的限定
11.9深入泛型機制
11.10泛型的一些問題
11.10.1接口的二次實現
11.10.2方法重載
11.10.3泛型類型的實例化
11.10.4異常
11.11使用泛型的限制
11.12類型參數的命名約定
11.13總結
11.14實戰練習

第12章Lambda表達式
12.1理解Lambda表達式
12.2 Lambda表達式的語法
12.3函數式接口
12.4內置函數式接口
12.5方法引用
12.6構造方法引用
12.7數組引用
12.8總結
12.9實戰練習

第13章集合類
13.1集合框架中的接口與實現類
13.1.1集合框架中的接口
13.1.2集合框架中的實現類
13.1.3 Collection類型的集合
13.1.4 Map類型的集合
13.2迭代
13.2.1 Iterator接口
13.2.2迭代器與“for each”循環
13.2.3新增的forEach方法
13.2.4 ListIterator接口
13.2.5迭代與回調
13.3數據結構簡介
13.3.1鍊錶
13.3.2棧
13.3.3隊列
13.4 List
13.4. 1 ArrayList
13.4.2 LinkedList
13.4.3 List集合類的性能
13.5 Set
13.5.1 HashSet
13.5.2 TreeSet
13.5.3 LinkedHashSet
13.5.4 Set集合類的性能
13.6 Queue
13.6. 1 Queue接口
13.6.2 PriorityQueue類
13.6.3 Deque接口
13.7 Collections類
13.7.1排序集合中的元素
13.7.2獲取最大和最小元素
13.7.3在集合中搜索
13.7.4獲取包裝器集合
13.8再探Comparator接口
13.9深入Map類型
13.9.1 Map接口
13.9.2 Map的工作原理
13.9.3 HashMap
13.9.4 TreeMap
13.9.5 LinkedHashMap
13.9.6 Map性能測試
13.10遺留的集合
13.10.1 Enumeration接口
13.10.2 Vector類
13.10.3 Stack類
13.10.4 Hashtable類
13.10.5 Properties類
13.10.6 BitSet類
13.11集合工廠方法
13.11.1 of方法
13.11.2 copyOf方法
13.12總結
13.13實戰練習

第14章Stream
14.1什麼是Stream
14.2創建流
14.3並行流與串行流
14.4有序流和無序流
14.5中間操作
14.5.1篩选和截斷
14.5.2映射
14.5. 3排序
14.5.4 peek
14.6終端操作
14.6.1遍歷
14.6.2查找與匹配
14.6.3最大/最小與計數
14.6.4收集統計信息
14.6.5 reduce
14.6.6 collect
14.7並行流的性能
14.8總結
14.9實戰練習

第15章Class類與反射API
15.1 Class<T>類
15.2獲取類型信息
15.2.1獲取方法和字段信息
15.2.2獲取基類和接口信息
15.2.3獲取枚舉信息
15.2.4獲取泛型信息
15.2.5獲取註解信息
15.3檢測類型
15.4使用Class和反射創建類的對象
15.5使用反射調用對象的方法
15.6使用反射修改對象的字段
15.7依賴注入容器
15.8動態代理
15.9 ClassLoader
15.9.1類加載器的分類
15.9. 2類加載器的加載機制
15.9.3自定義類加載器
15.10適可而止
15.11方法句柄
15.12服務加載器
15.13總結
15.14實戰練習

第16章註解(Annotation)
16. 1預定義的註解
16.1.1 @Override
16.1.2 @Deprecated
16.1.3 @SuppressWarnings
16.1.4 @SafeVarargs
16.1.5 @FunctionalInterface
16.2自定義註解
16.3元註解
16.3.1 @Documented
16.3.2 @Retention
16.3.3 @Target
16.3.4 @Inherited
16.3.5 @Repeatable
16.4註解與反射
16.5編寫註解處理器
16. 5.1依賴注入容器的註解實現
16.5.2使用註解生成數據庫表
16.6總結
16.7實戰練習

第17章多線程
17.1基本概念
17.1.1程序和進程
17.1. 2線程
17.2 Java對多線程的支持
17.3 Java線程
17.3.1 Thread類
17.3.2創建任務
17.3.3讓步
17.3.4休眠
17.3.5優先級
17 .3.6加入一個線程
17.3.7捕獲線程的異常
17.3.8後台線程
17.3.9線程組
17.3.10線程的狀態
17.4線程同步
17.4.1錯誤地訪問共享資源
17.4.2同步語句塊
17.4.3同步方法
17.4.4死鎖
17.5線程本地存儲
17.5.1使用ThreadLocal類
17.5.2 ThreadLocal的實現原理
17.6生產者與消費者
17.7線程的終止
17.7.1取消一個任務
17.7.2在阻塞中中止
17.7.3注意清理
17.8線程池
17.9總結
17.10實戰練習

第18章Java常用工具類
18.1 java.lang.Math類
18.2隨機數
18.2.1 Math.random方法
18.2.2 Random類
18.2.3 ThreadLocalRandom類
18.3大數字運算
18.3.1 BigInteger
18.3.2 BigDecimal
18.4日期時間工具
18.4.1 Date類
18.4 .2 DateFormat類
18.4.3 SimpleDateFormat類
18.4.4 Calendar類
18.5 Java 8新增的日期/時間API
18.5.1新的日期/時間類
18.5.2構造日期/時間對象
18.5.3格式化和解析日期/時間字符串
18.5.4操作日曆字段
18.5.5計算時間間隔
18.5.6使用Instant計算某項操作花費的時間
18.5.7判斷閏年
18.5.8與Date和Calendar的相互轉換
18.6 Optional類
18.6.1創建Optional類的實例
18.6.2判斷Optional的值是否存在
18 .6.3獲取Optional的值
18.6.4過濾與映射
18.6.5得到Stream對象
18.6.6為什麼要使用Optional
18.6.7 OptionalInt、OptionalLong和OptionalDouble
18.7 Base64編解碼
18 .8 Timer類
18.9 Runtime類與單例設計模式
18.10總結
18.11實戰練習

第19章Java I/O操作
19.1 File類
19.1.1分隔符
19.1.2創建文件夾
19.1.3文件操作
19.1.4搜索目錄中的文件
19.1.5移動文件
19.1.6臨時文件
19.2流式I/O
19.3輸入輸出流
19.3.1 InputStream
19.3.2 OutputStream
19.3.3字節數組輸入/輸出流
19.3.4文件輸入/輸出流
19.3.5過濾流
19.3.6緩衝的輸入/輸出流
19.3.7數據輸入/輸出流
19.3.8管道流
19.3.9複製文件
19.4 Java I/O庫的設計原則
19.5 Reader和Writer
19.6 InputStreamReader和OutputStreamWriter
19.7字符集與中文亂碼問題
19.7. 1字符集
19.7.2對亂碼產生過程的分析
19.7.3 Charset類
19.8 RandomAccessFile類
19.9標準I/O
19.9.1從標準輸入中讀取數據
19.9.2 Scanner
19.9.3 I/O重定向
19.10對象序列化
19.10.1使用對象流實現序列化
19.10.2對象引用的序列化
19.10.3序列化過濾器
19.10.4定制序列化
19.10.5替換對象
19.10.6使用Externalizable接口定制序列化
19.10.7序列化版本
19.11 NIO
19.11.1緩衝區(Buffer)
19.11.2通道(Channel)
19.11.3使用通道複製文件
19.11.4視圖緩衝區
19.11.5字節順序
19.11.6直接和非直接緩衝區
19.11.7分散和聚集
19.11.8字符緩衝區的問題
19.11.9內存映射文件
19.11.10對文件加鎖
19.11 .11管道
19.12 Files類與Path接口
19.12.1 Path接口
19.12.2讀寫文件
19.12.3遍歷目錄
19.12.4小結
19.13異步文件通道
19.13.1寫入數據
19.13.2讀取數據
19.14總結
19.15實戰練習

第20章Java並發編程
20.1 Callable和Future接口
20.2新的任務執行框架
20.2.1 Executor接口
20.2.2 ExecutorService接口
20.2.3 Executors工具類
20.2.4 ThreadFactory
20.2.5 ScheduledExecutorService
20 .2.6批量執行任務
20.2.7 CompletionService接口
20.2.8 ThreadPoolExecutor類
20.3鎖對象
20.3.1 Lock接口
20.3.2重入互斥鎖
20.3.3讀寫鎖
20.3.4 StampedLock
20.4條件對象
20.5同步工具類
20.5.1 CountDownLatch
20.5.2 CyclicBarrier
20.5.3 Semaphore
20.5.4 Exchanger
20.6線程安全的集合
20 .6.1寫時拷貝
20.6.2阻塞隊列
20.6.3延遲隊列
20.6.4傳輸隊列
20.6.5 ConcurrentHashMap
20.6.6 ConcurrentSkipListMap
20.7 Fork/Join框架
20.8 CompletableFuture
20.8.1異步執行任務
20.8.2構造異步任務鏈
20.8.3結果轉換
20.8.4組合異步任務
20 .8.5任務鏈完成時的結果處理和異常處理
20.9原子操作
20.9.1 AtomicInteger類
20.9.2 LongAdder
20.10變量句柄
20.11總結
20.12實戰練習

第21章Eclipse開發工具
21.1 Eclipse簡介
21.2下載並安裝
21.3 Eclipse開發環境介紹
21.4配置Eclipse
21.4.1配置JDK
21.4.2配置字體
21.4.3配置和使用快捷鍵
21 .4.4配置字符集
21.5開發Java程序
21.6調試代碼
21.7 JUnit單元測試
21.8導入現有的Eclipse項目
21.9總結
21.10實戰練習

第22章圖形界面編程
22.1 AWT
22.1.1第一個AWT應用程序
22.1.2關閉窗口
22.1.3向窗口內添加組件
22.2佈局管理器
22.2.1 BorderLayout
22.2.2 FlowLayout
22.2.3 GridLayout
22.2.4 CardLayout
22.2.5 GridBagLayout
22.2.6組合多個佈局管理器
22.3事件模型
22.3.1按鈕點擊事件的處理
22.3.2事件監聽器
22.3.3觀察者模式
22.4 Swing
22.4.1基本的框架窗口
22.4.2添加文本域和菜單欄
22.4.3菜單功能
22.4 .4彈出菜單
22.5 Swing與並發
22.6使用WindowBuilder快速開發圖形界面程序
22.6.1安裝WindowBuilder
22.6.2用戶登錄界面
22.6.3註冊事件監聽器
22.7總結
22. 8實戰練習

第23章Java網絡編程
23.1網絡基礎知識
23.1.1計算機網絡
23.1.2 IP地址
23.1.3協議
23.1.4網絡的狀況
23.1.5網絡異質性問題的解決
23.1. 6 ISO/OSI七層參考模型
23.1.7數據封裝
23.1.8 TCP/IP模型
23.1.9端口
23.1.10套接字(Socket)
23.1.11客戶機/服務器模式
23.2基於TCP的套接字編程
23.2.1服務器程序
23.2.2客戶端程序
23.2.3多線程的服務器程序
23.2.4套接字超時
23.3基於UDP的套接字編程
23.3.1接收端
23.3.2發送端
23.3.3獲取發送端的信息
23.4非阻塞的套接字編程
23.4.1 SocketChannel
23.4.2 ServerSocketChannel
23.4.3 Selector
23.4.4非阻塞的服務器程序
23.4.5非阻塞的客戶端程序
23.5 URL和URLConnection
23.5.1 URL類
23.5.2 URLConnection類
23.5.3一個實用的下載程序
23.6 HTTP Client API
23.6.1 HttpClient
23.6.2 HttpRequest
23.6.3 HttpResponse
23.6.4異步發送多個請求
23.6.5啟用HttpClient的日誌記錄功能
23.7總結
23.8實戰練習

第24章數據庫訪問
24.1 JDBC驅動程序的類型
24.1.1 JDBC-ODBC橋
24.1.2部分本地API的Java驅動程序
24.1.3 JDBC網絡純Java驅動程序
24.1.4本地協議的純Java驅動程序
24.2安裝數據庫
24.3下載MySQL JDBC驅動
24.4 JDBC API
24.5加載並註冊數據庫驅動
24.5.1 Driver接口
24.5.2加載與註冊JDBC驅動
24.5.3服務加載
24.6建立到數據庫的連接
24.7訪問數據庫
24.7.1 Statement
24.7.2 ResultSet
24.7.3 PreparedStatement
24.7.4 CallableStatement
24.7.5元數據
24.8事務處理
24.9可滾動和可更新的結果集
24.9 .1可滾動的結果集
24.9.2可更新的結果集
24.10行集
24.10.1行集的標準實現
24.10.2行集的事件模型
24.10.3 CachedRowSet
24. 11 JDBC數據源和連接池
24.12總結
24.13實戰練習

第25章Java平台模塊系統
25.1 Java平台的模塊
25.2模塊的物理結構
25.3創建模塊
25.4模塊依賴
25.5導出包
25.6可傳遞的模塊與靜態依賴
25.7開放包
25.8限定導出和開放
25.9服務加載
25.10未命名模塊
25.11自動模塊
25.12為什麼要引入模塊系統
25. 13總結
25.14 實戰練習