瘋狂Java講義(第4版)

瘋狂Java講義(第4版)

《瘋狂Java講義(第4版)》深入介紹了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包下絕大部分類和接口。本書重點介紹了Java 9的模組化系統,還詳細介紹了Java 9的jshell工具、多版本JAR包、匿名內部類的菱形語法、增強的try語句、私有接口方法,以及Java 9新增的各種API功能。

圖書信息

作 譯 者:李剛

出版時間:2018-01

版 次:01-01

開 本:16開

I S B N :9787121331084

內容簡介

本書是《瘋狂Java講義》的第4版,第4版保持了前3版系統、全面、講解淺顯、細緻的特性,全面新增介紹了Java 9的新特性。本書深入介紹了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包下絕大部分類和接口。本書重點介紹了Java 9的模組化系統,還詳細介紹了Java 9的jshell工具、多版本JAR包、匿名內部類的菱形語法、增強的try語句、私有接口方法,以及Java 9新增的各種API功能。與前3版類似,本書並不單純從知識角度來講解Java,而是從解決問題的角度來介紹Java語言,所以本書中涉及大量實用案例開發:五子棋遊戲、梭哈遊戲、仿QQ的遊戲大廳、MySQL企業管理器、仿EditPlus的文本編輯器、多執行緒、斷點下載工具、Spring框架的IoC容器……這些案例既能讓讀者鞏固每章的知識,又可以讓讀者學以致用,激發編程自豪感,進而引爆內心的編程激情。

圖書目錄

第1章 Java語言概述與開發環境 1

1.1 Java語言的發展簡史 2

1.2 Java程式運行機制 4

1.2.1 高級語言的運行機制 4

1.2.2 Java程式的運行機制和JVM 5

1.3 開發Java的準備 6

1.3.1 下載和安裝Java 9的JDK 6

1.3.2 設定PATH環境變數 9

1.4 第一個Java程式 11

1.4.1 編輯Java原始碼 11

1.4.2 編譯Java程式 11

1.4.3 運行Java程式 12

1.4.4 根據CLASSPATH環境變數定位類 13

1.5 Java程式的基本規則 14

1.5.1 Java程式的組織形式 14

1.5.2 Java源檔案的命名規則 15

1.5.3 初學者容易犯的錯誤 15

1.6 JDK 9新增的jshell工具 17

1.7 Java 9的G1垃圾回收器 18

1.8 何時開始使用IDE工具 20

1.9 本章小結 21

本章練習 21

第2章 理解面向對象 22

2.1 面向對象 23

2.1.1 結構化程式設計簡介 23

2.1.2 程式的三種基本結構 24

2.1.3 面向對象程式設計簡介 26

2.1.4 面向對象的基本特徵 27

2.2 UML(統一建模語言)介紹 28

2.2.1 用例圖 30

2.2.2 類圖 30

2.2.3 組件圖 32

2.2.4 部署圖 33

2.2.5 順序圖 33

2.2.6 活動圖 34

2.2.7 狀態機圖 35

2.3 Java的面向對象特徵 36

2.3.1 一切都是對象 36

2.3.2 類和對象 36

2.4 本章小結 37

第3章 數據類型和運算符 38

3.1 注釋 39

3.1.1 單行注釋和多行注釋 39

3.1.2 Java 9增強文檔注釋 40

3.2 標識符和關鍵字 46

3.2.1 分隔設定 46

3.2.2 Java 9的標識符規則 48

3.2.3 Java關鍵字 48

3.3 數據類型分類 48

3.4 基本數據類型 49

3.4.1 整型 50

3.4.2 字元型 52

3.4.3 浮點型 53

3.4.4 數值中使用下畫線分隔 54

3.4.5 布爾型 55

3.5 基本類型的類型轉換 55

3.5.1 自動類型轉換 56

3.5.2 強制類型轉換 57

3.5.3 表達式類型的自動提升 58

3.6 直接量 59

3.6.1 直接量的類型 59

3.6.2 直接量的賦值 60

3.7 運算符 61

3.7.1 算術運算符 61

3.7.2 賦值運算符 63

3.7.3 位運算符 64

3.7.4 擴展後的賦值運算符 66

3.7.5 比較運算符 67

3.7.6 邏輯運算符 68

3.7.7 三目運算符 69

3.7.8 運算符的結合性和優先權 69

3.8 本章小結 71

本章練習 71

第4章 流程控制與數組 72

4.1 順序結構 73

4.2 分支結構 73

4.2.1 if條件語句 73

4.2.2 Java 7增強後的switch分支語句 77

4.3 循環結構 79

4.3.1 while循環語句 79

4.3.2 do while循環語句 80

4.3.3 for循環 81

4.3.4 嵌套循環 84

4.4 控制循環結構 85

4.4.1 使用break結束循環 85

4.4.2 使用continue忽略本次循環剩下語句 86

4.4.3 使用return結束方法 87

4.5 數組類型 87

4.5.1 理解數組:數組也是一種類型 87

4.5.2 定義數組 88

4.5.3 數組的初始化 89

4.5.4 使用數組 90

4.5.5 foreach循環 91

4.6 深入數組 92

4.6.1 記憶體中的數組 92

4.6.2 基本類型數組的初始化 95

4.6.3 引用類型數組的初始化 96

4.6.4 沒有多維數組 98

4.6.5 Java 8增強的工具類:Arrays 100

4.6.6 數組的套用舉例 103

4.7 本章小結 106

本章練習 106

第5章 面向對象(上) 107

5.1 類和對象 108

5.1.1 定義類 108

5.1.2 對象的產生和使用 111

5.1.3 對象、引用和指針 111

5.1.4 對象的this引用 112

5.2 方法詳解 116

5.2.1 方法的所屬性 116

5.2.2 方法的參數傳遞機制 117

5.2.3 形參個數可變的方法 120

5.2.4 遞歸方法 121

5.2.5 方法重載 123

5.3 成員變數和局部變數 124

5.3.1 成員變數和局部變數 124

5.3.2 成員變數的初始化和記憶體中的運行機制 127

5.3.3 局部變數的初始化和記憶體中的運行機制 129

5.3.4 變數的使用規則 130

5.4 隱藏和封裝 131

5.4.1 理解封裝 131

5.4.2 使用訪問控制符 131

5.4.3 package、import和import static 134

5.4.4 Java的常用包 139

5.5 深入構造器 139

5.5.1 使用構造器執行初始化 139

5.5.2 構造器重載 140

5.6 類的繼承 142

5.6.1 繼承的特點 142

5.6.2 重寫父類的方法 143

5.6.3 super限定 145

5.6.4 調用父類構造器 147

5.7 多態 149

5.7.1 多態性 149

5.7.2 引用變數的強制類型轉換 151

5.7.3 instanceof運算符 152

5.8 繼承與組合 153

5.8.1 使用繼承的注意點 153

5.8.2 利用組合實現復用 154

5.9 初始化塊 157

5.9.1 使用初始化塊 157

5.9.2 初始化塊和構造器 159

5.9.3 靜態初始化塊 160

5.10 本章小結 162

本章練習 162

第6章 面向對象(下) 164

6.1 Java 8增強的包裝類 165

6.2 處理對象 169

6.2.1 列印對象和toString方法 169

6.2.2 ==和equals方法 171

6.3 類成員 174

6.3.1 理解類成員 174

6.3.2 單例(Singleton)類 175

6.4 final修飾符 176

6.4.1 final成員變數 177

6.4.2 final局部變數 178

6.4.3 final修飾基本類型變數和引用類型變數

的區別 179

6.4.4 可執行“宏替換”的final變數 180

6.4.5 final方法 182

6.4.6 final類 182

6.4.7 不可變類 183

6.4.8 快取實例的不可變類 185

6.5 抽象類 188

6.5.1 抽象方法和抽象類 188

6.5.2 抽象類的作用 191

6.6 Java 9改進的接口 192

6.6.1 接口的概念 192

6.6.2 Java 9中接口的定義 193

6.6.3 接口的繼承 195

6.6.4 使用接口 196

6.6.5 接口和抽象類 197

6.6.6 面向接口編程 198

6.7 內部類 202

6.7.1 非靜態內部類 202

6.7.2 靜態內部類 206

6.7.3 使用內部類 208

6.7.4 局部內部類 210

6.7.5 Java 8改進的匿名內部類 211

6.8 Java 8新增的Lambda表達式 214

6.8.1 Lambda表達式入門 214

6.8.2 Lambda表達式與函式式接口 217

6.8.3 方法引用與構造器引用 218

6.8.4 Lambda表達式與匿名內部類的聯繫

和區別 221

6.8.5 使用Lambda表達式調用Arrays的

類方法 222

6.9 枚舉類 223

6.9.1 手動實現枚舉類 223

6.9.2 枚舉類入門 223

6.9.3 枚舉類的成員變數、方法和構造器 225

6.9.4 實現接口的枚舉類 227

6.9.5 包含抽象方法的枚舉類 228

6.10 對象與垃圾回收 229

6.10.1 對象在記憶體中的狀態 229

6.10.2 強制垃圾回收 230

6.10.3 finalize方法 231

6.10.4 對象的軟、弱和虛引用 233

6.11 修飾符的適用範圍 236

6.12 Java 9的多版本JAR包 237

6.12.1 jar命令詳解 237

6.12.2 創建可執行的JAR包 240

6.12.3 關於JAR包的技巧 241

6.13 本章小結 242

本章練習 242

第7章 Java基礎類庫 243

7.1 與用戶互動 244

7.1.1 運行Java程式的參數 244

7.1.2 使用Scanner獲取鍵盤輸入 245

7.2 系統相關 247

7.2.1 System類 247

7.2.2 Runtime類與Java 9的ProcessHandle 249

7.3 常用類 250

7.3.1 Object類 250

7.3.2 Java 7新增的Objects類 252

7.3.3 Java 9改進的String、StringBuffer和StringBuilder類 253

7.3.4 Math類 256

7.3.5 Java 7的ThreadLocalRandom與Random 258

7.3.6 BigDecimal類 260

7.4 Java 8的日期、時間類 262

7.4.1 Date類 262

7.4.2 Calendar類 263

7.4.3 Java 8新增的日期、時間包 266

7.5 正則表達式 268

7.5.1 創建正則表達式 268

7.5.2 使用正則表達式 271

7.6 變數處理和方法處理 274

7.6.1 Java 9增強的MethodHandle 274

7.6.2 Java 9增加的VarHandle 275

7.7 Java 9改進的國際化與格式化 276

7.7.1 Java國際化的思路 277

7.7.2 Java支持的國家和語言 277

7.7.3 完成程式國際化 278

7.7.4 使用MessageFormat處理包含占位符

的字元串 279

7.7.5 使用類檔案代替資源檔案 280

7.7.6 Java 9新增的日誌API 281

7.7.7 使用NumberFormat格式化數字 283

7.7.8 使用DateFormat格式化日期、時間 284

7.7.9 使用SimpleDateFormat格式化日期 286

7.8 Java 8新增的日期、時間格式器 286

7.8.1 使用DateTimeFormatter完成格式化 287

7.8.2 使用DateTimeFormatter解析字元串 288

7.9 本章小結 289

本章練習 289

第8章 Java集合 290

8.1 Java集合概述 291

8.2 Collection和Iterator接口 292

8.2.1 使用Lambda表達式遍歷集合 294

8.2.2 使用Java 8增強的Iterator遍歷集合元素 295

8.2.3 使用Lambda表達式遍歷Iterator 296

8.2.4 使用foreach循環遍歷集合元素 297

8.2.5 使用Java 8新增的Predicate操作集合 297

8.2.6 使用Java 8新增的Stream操作集合 298

8.3 Set集合 300

8.3.1 HashSet類 301

8.3.2 LinkedHashSet類 304

8.3.3 TreeSet類 305

8.3.4 EnumSet類 311

8.3.5 各Set實現類的性能分析 312

8.4 List集合 313

8.4.1 Java 8改進的List接口和ListIterator接口 313

8.4.2 ArrayList和Vector實現類 316

8.4.3 固定長度的List 317

8.5 Queue集合 317

8.5.1 PriorityQueue實現類 318

8.5.2 Deque接口與ArrayDeque實現類 318

8.5.3 LinkedList實現類 320

8.5.4 各種線性表的性能分析 321

8.6 Java 8增強的Map集合 322

8.6.1 Java 8為Map新增的方法 324

8.6.2 Java 8改進的HashMap和Hashtable

實現類 325

8.6.3 LinkedHashMap實現類 328

8.6.4 使用Properties讀寫屬性檔案 328

8.6.5 SortedMap接口和TreeMap實現類 329

8.6.6 WeakHashMap實現類 332

8.6.7 IdentityHashMap實現類 333

8.6.8 EnumMap實現類 333

8.6.9 各Map實現類的性能分析 334

8.7 HashSet和HashMap的性能選項 334

8.8 操作集合的工具類:Collections 335

8.8.1 排序操作 335

8.8.2 查找、替換操作 338

8.8.3 同步控制 339

8.8.4 設定不可變集合 339

8.8.5 Java 9新增的不可變集合 340

8.9 煩瑣的接口:Enumeration 341

8.10 本章小結 342

本章練習 342

第9章 泛型 343

9.1 泛型入門 344

9.1.1 編譯時不檢查類型的異常 344

9.1.2 使用泛型 344

9.1.3 Java 9增強的“菱形”語法 345

9.2 深入泛型 347

9.2.1 定義泛型接口、類 347

9.2.2 從泛型類派生子類 348

9.2.3 並不存在泛型類 349

9.3 類型通配符 350

9.3.1 使用類型通配符 352

9.3.2 設定類型通配符的上限 352

9.3.3 設定類型通配符的下限 354

9.3.4 設定泛型形參的上限 356

9.4 泛型方法 356

9.4.1 定義泛型方法 356

9.4.2 泛型方法和類型通配符的區別 359

9.4.3 Java 7的“菱形”語法與泛型構造器 360

9.4.4 泛型方法與方法重載 361

9.4.5 Java 8改進的類型推斷 362

9.5 擦除和轉換 362

9.6 泛型與數組 364

9.7 本章小結 365

第10章 異常處理 366

10.1 異常概述 367

10.2 異常處理機制 368

10.2.1 使用try...catch捕獲異常 368

10.2.2 異常類的繼承體系 370

10.2.3 Java 7提供的多異常捕獲 373

10.2.4 訪問異常信息 373

10.2.5 使用finally回收資源 374

10.2.6 異常處理的嵌套 376

10.2.7 Java 9增強的自動關閉資源的try語句 377

10.3 Checked異常和Runtime異常體系 378

10.3.1 使用throws聲明拋出異常 379

10.4 使用throw拋出異常 380

10.4.1 拋出異常 380

10.4.2 自定義異常類 382

10.4.3 catch和throw同時使用 382

10.4.4 Java 7增強的throw語句 384

10.4.5 異常鏈 385

10.5 Java的異常跟蹤棧 386

10.6 異常處理規則 388

10.6.1 不要過度使用異常 388

10.6.2 不要使用過於龐大的try塊 389

10.6.3 避免使用Catch All語句 390

10.6.4 不要忽略捕獲到的異常 390

10.7 本章小結 390

本章練習 390

第11章 AWT編程 391

11.1 Java改進的GUI(圖形用戶界面)和AWT 392

11.2 AWT容器 393

11.3 布局管理器 396

11.3.1 FlowLayout布局管理器 396

11.3.2 BorderLayout布局管理器 397

11.3.3 GridLayout布局管理器 399

11.3.4 GridBagLayout布局管理器 400

11.3.5 CardLayout布局管理器 402

11.3.6 絕對定位 404

11.3.7 BoxLayout布局管理器 405

11.4 AWT常用組件 407

11.4.1 基本組件 407

11.4.2 對話框(Dialog) 409

11.5 事件處理 411

11.5.1 Java事件模型的流程 411

11.5.2 事件和事件監聽器 413

11.5.3 事件適配器 417

11.5.4 使用內部類實現監聽器 418

11.5.5 使用外部類實現監聽器 418

11.5.6 類本身作為事件監聽器類 419

11.5.7 匿名內部類實現監聽器 420

11.6 AWT選單 421

11.6.1 選單條、選單和選單項 421

11.6.2 右鍵選單 423

11.7 在AWT中繪圖 425

11.7.1 畫圖的實現原理 425

11.7.2 使用Graphics類 425

11.8 處理點陣圖 430

11.8.1 Image抽象類和BufferedImage實現類 430

11.8.2 Java 9增強的ImageIO 432

11.9 剪貼簿 436

11.9.1 數據傳遞的類和接口 436

11.9.2 傳遞文本 437

11.9.3 使用系統剪貼簿傳遞圖像 438

11.9.4 使用本地剪貼簿傳遞對象引用 441

11.9.5 通過系統剪貼簿傳遞Java對象 443

11.10 拖放功能 446

11.10.1 拖放目標 446

11.10.2 拖放源 449

11.11 本章小結 451

本章練習 451

第12章 Swing編程 452

12.1 Swing概述 453

12.2 Swing基本組件的用法 454

12.2.1 Java 7 的Swing組件層次 454

12.2.2 AWT組件的Swing實現 455

12.2.3 為組件設定框線 461

12.2.4 Swing組件的雙緩衝和鍵盤驅動 463

12.2.5 使用JToolBar創建工具條 464

12.2.6 使用JFileChooser和Java 7增強的JColorChooser 466

12.2.7 使用JOptionPane 473

12.3 Swing中的特殊容器 478

12.3.1 使用JSplitPane 478

12.3.2 使用JTabbedPane 480

12.3.3 使用JLayeredPane、JDesktopPane和JInternalFrame 484

12.4 Swing簡化的拖放功能 491

12.5 Java 7新增的Swing功能 492

12.5.1 使用JLayer裝飾組件 492

12.5.2 創建透明、不規則形狀視窗 498

12.6 使用JProgressBar、ProgressMonitor和BoundedRangeModel 500

創建進度條 500

12.6.1 創建進度條 500

12.6.2 創建進度對話框 503

12.7 使用JSlider和BoundedRangeModel創建

滑動條 505

12.8 使用JSpinner和SpinnerModel創建微調控制器 508

12.9 使用JList、JComboBox創建列表框 511

12.9.1 簡單列表框 511

12.9.2 不強制存儲列表項的ListModel和ComboBoxModel 514

12.9.3 強制存儲列表項的DefaultListModel和 DefaultComboBoxModel 517

12.9.4 使用ListCellRenderer改變列表項外觀 519

12.10 使用JTree和TreeModel創建樹 521

12.10.1 創建樹 522

12.10.2 拖動、編輯樹節點 524

12.10.3 監聽節點事件 528

12.10.4 使用DefaultTreeCellRenderer改變節點

外觀 530

12.10.5 擴展DefaultTreeCellRenderer改變節點

外觀 531

12.10.6 實現TreeCellRenderer改變節點外觀 534

12.11 使用JTable和TableModel創建表格 535

12.11.1 創建表格 536

12.11.2 TableModel和監聽器 541

12.11.3 TableColumnModel和監聽器 545

12.11.4 實現排序 548

12.11.5 繪製單元格內容 551

12.11.6 編輯單元格內容 554

12.12 使用JFormattedTextField和JTextPane創建

格式文本 557

12.12.1 監聽Document的變化 558

12.12.2 使用JPasswordField 560

12.12.3 使用JFormattedTextField 560

12.12.4 使用JEditorPane 568

12.12.5 使用JTextPane 568

12.13 本章小結 575

本章練習 575

第13章 MySQL資料庫與JDBC編程 576

13.1 JDBC基礎 577

13.1.1 JDBC簡介 577

13.1.2 JDBC驅動程式 578

13.2 SQL語法 579

13.2.1 安裝資料庫 579

13.2.2 關係資料庫基本概念和MySQL

基本命令 581

13.2.3 SQL語句基礎 583

13.2.4 DDL語句 584

13.2.5 資料庫約束 588

13.2.6 索引 595

13.2.7 視圖 596

13.2.8 DML語句語法 597

13.2.9 單表查詢 599

13.2.10 資料庫函式 603

13.2.11 分組和組函式 605

13.2.12 多表連線查詢 607

13.2.13 子查詢 611

13.2.14 集合運算 612

13.3 JDBC的典型用法 613

13.3.1 JDBC 4.2常用接口和類簡介 613

13.3.2 JDBC編程步驟 615

13.4 執行SQL語句的方式 618

13.4.1 使用Java 8新增的executeLargeUpdate

方法執行DDL和DML語句 618

13.4.2 使用execute方法執行SQL語句 620

13.4.3 使用PreparedStatement執行SQL語句 621

13.4.4 使用CallableStatement調用存儲過程 626

13.5 管理結果集 627

13.5.1 可滾動、可更新的結果集 627

13.5.2 處理Blob類型數據 629

13.5.3 使用ResultSetMetaData分析結果集 634

13.6 Java 7的RowSet 1.1 636

13.6.1 Java 7新增的RowSetFactory與RowSet 637

13.6.2 離線RowSet 638

13.6.3 離線RowSet的查詢分頁 640

13.7 事務處理 641

13.7.1 事務的概念和MySQL事務支持 641

13.7.2 JDBC的事務支持 643

13.7.3 Java 8增強的批量更新 645

13.8 分析資料庫信息 646

13.8.1 使用DatabaseMetaData分析資料庫信息 646

13.8.2 使用系統表分析資料庫信息 648

13.8.3 選擇合適的分析方式 649

13.9 使用連線池管理連線 649

13.9.1 DBCP數據源 650

13.9.2 C3P0數據源 651

13.10 本章小結 651

本章練習 651

第14章 註解(Annotation) 652

14.1 基本註解 653

14.1.1 限定重寫父類方法:@Override 653

14.1.2 Java 9增強的@Deprecated 654

14.1.3 抑制編譯器警告:@SuppressWarnings 655

14.1.4 “堆污染”警告與Java 9增強的

@SafeVarargs 655

14.1.5 Java 8的函式式接口與

@FunctionalInterface 656

14.2 JDK的元註解 657

14.2.1 使用@Retention 657

14.2.2 使用@Target 658

14.2.3 使用@Documented 658

14.2.4 使用@Inherited 659

14.3 自定義註解 660

14.3.1 定義註解 660

14.3.2 提取註解信息 661

14.3.3 使用註解的示例 663

14.3.4 Java 8新增的重複註解 667

14.3.5 Java 8新增的類型註解 669

14.4 編譯時處理註解 670

14.5 本章小結 674

第15章 輸入/輸出 675

15.1 File類 676

15.1.1 訪問檔案和目錄 676

15.1.2 檔案過濾器 678

15.2 理解Java的IO流 679

15.2.1 流的分類 679

15.2.2 流的概念模型 680

15.3 位元組流和字元流 681

15.3.1 InputStream和Reader 681

15.3.2 OutputStream和Writer 683

15.4 輸入/輸出流體系 685

15.4.1 處理流的用法 685

15.4.2 輸入/輸出流體系 686

15.4.3 轉換流 688

15.4.4 推回輸入流 689

15.5 重定向標準輸入/輸出 690

15.6 Java虛擬機讀寫其他進程的數據 691

15.7 RandomAccessFile 694

15.8 Java 9改進的對象序列化 697

15.8.1 序列化的含義和意義 697

15.8.2 使用對象流實現序列化 697

15.8.3 對象引用的序列化 699

15.8.4 Java 9增加的過濾功能 703

15.8.5 自定義序列化 704

15.8.6 另一種自定義序列化機制 709

15.8.7 版本 710

15.9 NIO 711

15.9.1 Java新IO概述 711

15.9.2 使用Buffer 712

15.9.3 使用Channel 715

15.9.4 字元集和Charset 717

15.9.5 檔案鎖 720

15.10 Java 7的NIO.2 721

15.10.1 Path、Paths和Files核心API 721

15.10.2 使用FileVisitor遍歷檔案和目錄 723

15.10.3 使用WatchService監控檔案變化 724

15.10.4 訪問檔案屬性 725

15.11 本章小結 726

本章練習 727

第16章 多執行緒 728

16.1 執行緒概述 729

16.1.1 執行緒和進程 729

16.1.2 多執行緒的優勢 730

16.2 執行緒的創建和啟動 731

16.2.1 繼承Thread類創建執行緒類 731

16.2.2 實現Runnable接口創建執行緒類 732

16.2.3 使用Callable和Future創建執行緒 733

16.2.4 創建執行緒的三種方式對比 735

16.3 執行緒的生命周期 735

16.3.1 新建和就緒狀態 735

16.3.2 運行和阻塞狀態 737

16.3.3 執行緒死亡 738

16.4 控制執行緒 739

16.4.1 join執行緒 739

16.4.2 後台執行緒 740

16.4.3 執行緒睡眠:sleep 741

16.4.4 改變執行緒優先權 742

16.5 執行緒同步 743

16.5.1 執行緒安全問題 743

16.5.2 同步代碼塊 745

16.5.3 同步方法 747

16.5.4 釋放同步監視器的鎖定 749

16.5.5 同步鎖(Lock) 749

16.5.6 死鎖 751

16.6 執行緒通信 753

16.6.1 傳統的執行緒通信 753

16.6.2 使用Condition控制執行緒通信 756

16.6.3 使用阻塞佇列(BlockingQueue)控制

執行緒通信 758

16.7 執行緒組和未處理的異常 761

16.8 執行緒池 764

16.8.1 Java 8改進的執行緒池 764

16.8.2 Java 8增強的ForkJoinPool 766

16.9 執行緒相關類 769

16.9.1 ThreadLocal類 769

16.9.2 包裝執行緒不安全的集合 771

16.9.3 執行緒安全的集合類 771

16.9.3 Java 9新增的發布-訂閱框架 772

16.10 本章小結 774

本章練習 775

第17章 網路編程 776

17.1 網路編程的基礎知識 777

17.1.1 網路基礎知識 777

17.1.2 IP位址和連線埠號 778

17.2 Java的基本網路支持 779

17.2.1 使用InetAddress 779

17.2.2 使用URLDecoder和URLEncoder 780

17.2.3 URL、URLConnection和

URLPermission 781

17.3 基於TCP協定的網路編程 787

17.3.1 TCP協定基礎 787

17.3.2 使用ServerSocket創建 788

TCP伺服器端 788

17.3.3 使用Socket進行通信 788

17.3.4 加入多執行緒 791

17.3.5 記錄用戶信息 793

17.3.6 半關閉的Socket 801

17.3.7 使用NIO實現非阻塞Socket通信 802

17.3.8 使用Java 7的AIO實現非阻塞通信 807

17.4 基於UDP協定的網路編程 814

17.4.1 UDP協定基礎 814

17.4.2 使用DatagramSocket傳送、接收數據 814

17.4.3 使用MulticastSocket實現多點廣播 818

17.5 使用代理伺服器 828

17.5.1 直接使用Proxy創建連線 829

17.5.2 使用ProxySelector自動選擇代理伺服器 830

17.6 本章小結 832

本章練習 832

第18章 類載入機制與反射 833

18.1 類的載入、連線和初始化 834

18.1.1 JVM和類 834

18.1.2 類的載入 835

18.1.3 類的連線 836

18.1.4 類的初始化 836

18.1.5 類初始化的時機 837

18.2 類載入器 838

18.2.1 類載入機制 838

18.2.2 創建並使用自定義的類載入器 840

18.2.3 URLClassLoader類 843

18.3 通過反射查看類信息 844

18.3.1 獲得Class對象 845

18.3.2 從Class中獲取信息 845

18.3.3 Java 8新增的方法參數反射 849

18.4 使用反射生成並操作對象 850

18.4.1 創建對象 850

18.4.2 調用方法 852

18.4.3 訪問成員變數值 854

18.4.4 運算元組 855

18.5 使用反射生成JDK動態代理 857

18.5.1 使用Proxy和InvocationHandler

創建動態代理 857

18.5.2 動態代理和AOP 859

18.6 反射和泛型 862

18.6.1 泛型和Class類 862

18.6.2 使用反射來獲取泛型信息 864

18.7 本章小結 865

本章練習 866

附錄 Java 9的模組化系統 867

相關詞條

熱門詞條

聯絡我們