産品特色
編輯推薦
適讀人群 :本書適用於所有Java編程人員,包括Java初學者及資深Java開發人員。本書還可作為高校的Java教材,以及企業Java培訓教材,也可作為Oracle公司的OCJP認證的輔導教材。 本書是知名IT技術女作傢孫衛琴老師傾注六年心血打造的業界經典10年暢銷圖書《Java麵嚮對象編程》的升級版。以行雲流水般的語言詮釋Java編程藝術。基於*新Java技術,理論緊密結閤實際。
內容簡介
本書采用由淺入深、與實際應用緊密結閤的方式,利用大量經典實用的實例,詳細講解Java麵嚮對象的編程思想、編程語法和設計模式,介紹常見Java類庫的用法,總結優化Java編程的各種寶貴經驗,深入闡述Java虛擬機執行Java程序的原理。本書的實例都基於*新的JDK8版本。本書的*大特色是以6條主綫貫穿書:麵嚮對象編程思想、Java語言的語法、Java虛擬機執行Java程序的原理、在實際項目中的運用、設計模式和性能優化技巧。另外,本書還貫穿瞭Oracle公司的OCJP(Oracle Certified Java Programmer)認證的考試要點。
作者簡介
孫衛琴,知名IT作傢和Java專傢,畢業於上海交通大學,隨後主要從事基於Java的軟件開發工作,在此其間還從事Java方麵的培訓和谘詢工作。2002年開始Java技術領域的創作,文風清晰嚴謹、深入淺齣,深受讀者歡迎,其多部作品的銷量在同類書籍中一度位居全國榜首。代錶著作有:
<>
<>
<>
<>
<<精通Hibernate: Java對象持久化技術詳解>>
<<精通Struts: 基於MVC的Java Web設計與開發>>
<>
<>
內頁插圖
目錄
第1章麵嚮對象開發方法概述 1
1.1 結構化的軟件開發方法簡介 3
1.2 麵嚮對象的軟件開發方法簡介 6
1.2.1 對象模型 6
1.2.2 UML:可視化建模語言 7
1.2.3 Rational Rose:可視化建模
工具 7
1.3 麵嚮對象開發中的核心思想
和概念 8
1.3.1 問題領域、對象、屬性、狀態、行為、方法、實現 8
1.3.2 類、類型 10
1.3.3 消息、服務 12
1.3.4 接口 13
1.3.5 封裝、透明 14
1.3.6 抽象 18
1.3.7 繼承、擴展、覆蓋 20
1.3.8 組閤 21
1.3.9 多態、動態綁定 24
1.4 UML語言簡介 26
1.4.1 用例圖 27
1.4.2 類框圖 28
1.4.3 時序圖 29
1.4.4 協作圖 30
1.4.5 狀態轉換圖 30
1.4.6 組件圖 31
1.4.7 部署圖 32
1.5 類之間的關係 32
1.5.1 關聯(Association) 33
1.5.2 依賴(Dependency) 34
1.5.3 聚集(Aggregation) 35
1.5.4 泛化(Generalization) 36
1.5.5 實現(Realization) 36
1.5.6 區分依賴、關聯和聚集關係 36
1.6 實現Panel係統 39
1.6.1 擴展Panel係統 42
1.6.2 用配置文件進一步提高Panel
係統的可維護性 43
1.6.3 運行Panel係統 45
1.7 小結 45
1.8 思考題 46
第2章第一個Java應用 47
2.1 創建Java源文件 47
2.1.1 Java源文件結構 49
2.1.2 包聲明語句 49
2.1.3 包引入語句 51
2.1.4 方法的聲明 53
2.1.5 程序入口main()方法的聲明 54
2.1.6 給main()方法傳遞參數 55
2.1.7 注釋語句 55
2.1.8 關鍵字 56
2.1.9 標識符 56
2.1.10 編程規範 57
2.2 用JDK管理Java應用 57
2.2.1 JDK簡介以及安裝方法 58
2.2.2 編譯Java源文件 60
2.2.3 運行Java程序 62
2.2.4 給Java應用打包 65
2.3 使用和創建JavaDoc文檔 66
2.3.1 JavaDoc標記 68
2.3.2 javadoc命令的用法 73
2.4 Java虛擬機運行Java程序的
基本原理 75
2.5 小結 77
2.6 思考題 78
第3章數據類型和變量 81
3.1 基本數據類型 82
3.1.1 boolean類型 82
3.1.2 byte、short、int和long
類型 83
3.1.3 char類型與字符編碼 85
3.1.4 float和double類型 87
3.2 引用類型 91
3.2.1 基本類型與引用類型的區彆 92
3.2.2 用new關鍵字創建對象 94
3.3 變量的作用域 95
3.3.1 實例變量和靜態變量的
生命周期 97
3.3.2 局部變量的生命周期 100
3.3.3 成員變量和局部變量同名 101
3.3.4 將局部變量的作用域
最小化 102
3.4 對象的默認引用:this 103
3.5 參數傳遞 105
3.6 變量的初始化以及默認值 107
3.6.1 成員變量的初始化 107
3.6.2 局部變量的初始化 108
3.7 直接數 109
3.7.1 直接數的類型 110
3.7.2 直接數的賦值 111
3.8 小結 112
3.9 思考題 113
第4章操作符 115
4.1 操作符簡介 115
4.2 整型操作符 116
4.2.1 一元整型操作符 117
4.2.2 二元整型操作符 118
4.3 浮點型操作符 123
4.4 比較操作符和邏輯操作符 124
4.5 特殊操作符“?:” 127
4.6 字符串連接操作符“+” 127
4.7 操作符“==”與對象的
equals()方法 129
4.7.1 操作符“==” 129
4.7.2 對象的equals()方法 130
4.8 instanceof操作符 133
4.9 變量的賦值和類型轉換 135
4.9.1 基本數據類型轉換 136
4.9.2 引用類型的類型轉換 139
4.10 小結 139
4.11 思考題 142
第5章流程控製 145
5.1 分支語句 146
5.1.1 if else語句 146
5.1.2 switch語句 150
5.2 循環語句 154
5.2.1 while語句 154
5.2.2 do while語句 156
5.2.3 for語句 158
5.2.4 foreach語句 161
5.2.5 多重循環 162
5.3 流程跳轉語句 162
5.4 綜閤例子:八皇後問題 165
5.5 小結 168
5.6 思考題 169
第6章繼承 173
6.1 繼承的基本語法 173
6.2 方法重載(Overload) 175
6.3 方法覆蓋(Override) 177
6.4 方法覆蓋與方法重載的
異同 183
6.5 super關鍵字 183
6.6 多態 185
6.7 繼承的利弊和使用原則 189
6.7.1 繼承樹的層次不可太多 190
6.7.2 繼承樹的上層為抽象層 190
6.7.3 繼承關係最大的弱點:
打破封裝 191
6.7.4 精心設計專門用於被繼承
的類 193
6.7.5 區分對象的屬性與繼承 195
6.8 比較組閤與繼承 197
6.8.1 組閤關係的分解過程對應
繼承關係的抽象過程 197
6.8.2 組閤關係的組閤過程對應
繼承關係的擴展過程 200
6.9 小結 203
6.10 思考題 204
第7章 Java語言中的修飾符 209
7.1 訪問控製修飾符 210
7.2 abstract修飾符 212
7.3 final修飾符 214
7.3.1 final類 215
7.3.2 final方法 215
7.3.3 final變量 216
7.4 static修飾符 220
7.4.1 static變量 220
7.4.2 static方法 223
7.4.3 static代碼塊 226
7.4.4 用static進行靜態導入 228
7.5 小結 228
7.6 思考題 230
第8章接口 233
8.1 接口的概念和基本特徵 234
8.2 比較抽象類與接口 237
8.3 與接口相關的設計模式 241
8.3.1 定製服務模式 241
8.3.2 適配器模式 245
8.3.3 默認適配器模式 250
8.3.4 代理模式 251
8.3.5 標識類型模式 256
8.3.6 常量接口模式 257
8.4 小結 258
8.5 思考題 259
第9章異常處理 261
9.1 Java異常處理機製概述 262
9.1.1 Java異常處理機製的優點 262
9.1.2 Java虛擬機的方法調用棧 264
9.1.3 異常處理對性能的影響 267
9.2 運用Java異常處理機製 267
9.2.1 try-catch語句:捕獲異常 267
9.2.2 finally語句:任何情況下
必須執行的代碼 268
9.2.3 throws子句:聲明可能會
齣現的異常 270
9.2.4 throw語句:拋齣異常 271
9.2.5 異常處理語句的語法規則 271
9.2.6 異常流程的運行過程 274
9.2.7 跟蹤丟失的異常 278
9.3 Java異常類 280
9.3.1 運行時異常 282
9.3.2 受檢查異常
(Checked Exception) 282
9.3.3 區分運行時異常和受
檢查異常 283
9.4 用戶定義異常 285
9.4.1 異常轉譯和異常鏈 285
9.4.2 處理多樣化異常 288
9.5 異常處理原則 289
9.5.1 異常隻能用於非正常情況 290
9.5.2 為異常提供說明文檔 290
9.5.3 盡可能地避免異常 291
9.5.4 保持異常的原子性 292
9.5.5 避免過於龐大的try代碼塊 294
9.5.6 在catch子句中指定具體的
異常類型 294
9.5.7 不要在catch代碼塊中忽略
被捕獲的異常 294
9.6 記錄日誌 295
9.6.1 創建Logger對象及設置
日誌級彆 296
9.6.2 生成日誌 297
9.6.3 把日誌輸齣到文件 297
9.6.4 設置日誌的輸齣格式 298
9.7 使用斷言 299
9.8 小結 300
9.9 思考題 301
第10章類的生命周期 305
10.1 Java虛擬機及程序的
生命周期 305
10.2 類的加載、連接和初始化 305
10.2.1 類的加載 306
10.2.2 類的驗證 307
10.2.3 類的準備 307
10.2.4 類的解析 308
10.2.5 類的初始化 308
10.2.6 類的初始化的時機 310
10.3 類加載器 313
10.3.1 類加載的父親委托機製 315
10.3.2 創建用戶自定義的類
加載器 317
10.3.3 URLClassLoader類 323
10.4 類的卸載 324
10.5 小結 325
10.6 思考題 326
第11章對象的生命周期 327
11.1 創建對象的方式 327
11.2 構造方法 330
11.2.1 重載構造方法 331
11.2.2 默認構造方法 332
11.2.3 子類調用父類的構造方法 333
11.2.4 構造方法的作用域 337
11.2.5 構造方法的訪問級彆 337
11.3 靜態工廠方法 338
11.3.1 單例類 340
11.3.2 枚舉類 342
11.3.3 不可變(immutable)類與
可變類 344
11.3.4 具有實例緩存的
不可變類 348
11.3.5 鬆耦閤的係統接口 350
11.4 垃圾迴收 351
11.4.1 對象的可觸及性 352
11.4.2 垃圾迴收的時間 354
11.4.3 對象的finalize()方法簡介 354
11.4.4 對象的finalize()方法的
特點 355
11.4.5 比較finalize()方法和finally
代碼塊 357
11.5 清除過期的對象引用 358
11.6 對象的強、軟、弱和
虛引用 360
11.7 小結 366
11.8 思考題 367
第12章內部類 371
12.1 內部類的基本語法 371
12.1.1 實例內部類 373
12.1.2 靜態內部類 376
12.1.3 局部內部類 377
12.2 內部類的繼承 379
12.3 子類與父類中的內部類
同名 380
12.4 匿名類 381
12.5 內部接口以及接口中的
內部類 384
12.6 內部類的用途 385
12.6.1 封裝類型 385
12.6.2 直接訪問外部類的成員 385
12.6.3 迴調 386
12.7 內部類的類文件 388
12.8 小結 389
12.9 思考題 389
第13章多綫程 393
13.1 Java綫程的運行機製 393
13.2 綫程的創建和啓動 395
13.2.1 擴展java.lang.Thread類 395
13.2.2 實現Runnable接口 400
13.3 綫程的狀態轉換 402
13.3.1 新建狀態 402
13.3.2 就緒狀態 402
13.3.3 運行狀態 402
13.3.4 阻塞狀態 403
13.3.5 死亡狀態 404
13.4 綫程調度 405
13.4.1 調整各個綫程的優先級 406
13.4.2 綫程睡眠:Thread.sleep()
方法 408
13.4.3 綫程讓步:
Thead.yield()方法 409
13.4.4 等待其他綫程結束:join() 410
13.5 獲得當前綫程對象的引用 411
13.6 後颱綫程 412
13.7 定時器 413
13.8 綫程的同步 415
13.8.1 同步代碼塊 418
13.8.2 綫程同步的特徵 422
13.8.3 同步與並發 425
13.8.4 綫程安全的類 426
13.8.5 釋放對象的鎖 427
13.8.6 死鎖 429
13.9 綫程通信 430
13.10 中斷阻塞 435
13.11 綫程控製 436
13.11.1 被廢棄的suspend()和
resume()方法 437
13.11.2 被廢棄的stop()方法 438
13.11.3 以編程的方式控製綫程 438
13.12 綫程組 440
13.13 處理綫程未捕獲的異常 441
13.14 ThreadLocal類 443
13.15 concurrent並發包 445
13.15.1 用於綫程同步的Lock
外部鎖 446
13.15.2 用於綫程通信的Condition
條件接口 447
13.15.3 支持異步計算的Callable
接口和Future接口 450
13.15.4 通過綫程池來高效管理
多個綫程 452
13.15.5 BlockingQueue阻塞隊列 454
13.16 小結 457
13.17 思考題 458
第14章數組 461
14.1 數組變量的聲明 461
14.2 創建數組對象 462
14.3 訪問數組的元素和長度 463
14.4 數組的初始化 465
14.5 多維數組以及不規則數組 465
14.6 調用數組對象的方法 467
14.7 把數組作為方法參數或
返迴值 467
14.8 數組排序 470
14.9 數組的二分查找算法 471
14.10 哈希錶 472
14.11 數組實用類:Arrays 477
14.12 用符號“…”聲明數目
可變參數 480
14.13 小結 481
14.14 思考題 481
第15章 Java集閤 485
15.1 Collection和Iterator接口 486
15.2 集閤中直接加入基本類型
數據 489
15.3 Set(集) 490
15.3.1 Set的一般用法 490
15.3.2 HashSet類 491
15.3.3 TreeSet類 493
15.4 List(列錶) 497
15.4.1 訪問列錶的元素 498
15.4.2 為列錶排序 498
15.4.3 ListIterator接口 499
15.4.4 獲得固定長度的
List對象 500
15.4.5 比較Java數組和各種List
的性能 500
15.5 Queue(隊列) 503
15.5.1 Deque(雙嚮隊列) 504
15.5.2 PriorityQueue
(優先級隊列) 505
15.6 Map(映射) 505
15.7 HashSet和HashMap的
負載因子 507
15.8 集閤實用類:Collections 508
15.9 綫程安全的集閤 510
15.10 集閤與數組的互換 511
15.11 集閤的批量操作 512
15.12 曆史集閤類 513
15.13 枚舉類型 517
15.13.1 枚舉類型的構造方法 519
15.13.2 EnumSet類和
EnumMap類 520
15.14 小結 521
15.15 思考題 521
第16章泛型 523
16.1 Java集閤的泛型 523
16.2 定義泛型類和泛型接口 524
16.3 用extends關鍵字限定
類型參數 526
16.4 定義泛型數組 527
16.5 定義泛型方法 528
16.6 使用“?”通配符 529
16.7 使用泛型的注意事項 530
16.8 小結 531
16.9 思考題 531
第17章 Lambda錶達式 533
17.1 Lambda錶達式的基本用法 533
17.2 用Lambda錶達式代替
內部類 534
17.3 Lambda錶達式和集閤的
forEach()方法 535
17.4 用Lambda錶達式對集閤
進行排序 536
17.5 Lambda錶達式與
Stream API聯閤使用 537
17.6 Lambda錶達式可操縱的
變量作用域 539
17.7 Lambda錶達式中的方法
引用 540
17.8 函數式接口
(FunctionalInterface) 541
17.9 總結Java語法糖 541
17.10 小結 542
17.11 思考題 542
第18章輸入與輸齣(I/O) 545
18.1 輸入流和輸齣流概述 546
18.2 輸入流 547
18.2.1 字節數組輸入流:
ByteArrayInputStream類 548
18.2.2 文件輸入流:
FileInputStream類 549
18.2.3 管道輸入流:
PipedInputStream 551
18.2.4 順序輸入流:
SequenceInputStream類 552
18.3 過濾輸入流:
FilterInputStream 552
18.3.1 裝飾器設計模式 553
18.3.2 過濾輸入流的種類 554
18.3.3 DataInputStream類 555
18.3.4 BufferedInputStream類 556
18.3.5 PushbackInputStream類 557
18.4 輸齣流 557
18.4.1 字節數組輸齣流:
ByteArrayOutputStream類 557
18.4.2 文件輸齣流:
FileOutputStream 558
18.5 過濾輸齣流:
FilterOutputStream 559
18.5.1 DataOutputStream 559
18.5.2 BufferedOutputStream 559
18.5.3 PrintStream類 561
18.6 Reader/Writer概述 563
18.7 Reader類 565
18.7.1 字符數組輸入流:
CharArrayReader類 566
18.7.2 字符串輸入流:
StringReader類 566
18.7.3 InputStreamReader類 567
18.7.4 FileReader類 568
18.7.5 BufferedReader類 568
18.8 Writer類 568
18.8.1 字符數組輸齣流:
CharArrayWriter類 569
18.8.2 OutputStreamWriter類 570
18.8.3 FileWriter類 572
18.8.4 BufferedWriter類 573
18.8.5 PrintWriter類 573
18.9 標準I/O 574
18.9.1 重新包裝標準輸入和輸齣 574
18.9.2 標準I/O重定嚮 575
18.10 隨機訪問文件類:
RandomAccessFile 576
18.11 新I/O類庫 577
18.11.1 緩衝器Buffer概述 578
18.11.2 通道Channel概述 579
18.11.3 字符編碼Charset類概述 581
18.11.4 用FileChannel讀寫文件 581
18.11.5 控製緩衝區 582
18.11.6 字符編碼轉換 583
18.11.7 緩衝區視圖 584
18.11.8 文件映射緩衝區:
MappedByteBuffer 586
18.11.9 文件加鎖 587
18.12 對象的序列化與反序列化 589
18.13 自動釋放資源 595
18.14 用File類來查看、創建和
刪除文件或目錄 596
18.15 用java.nio.file類庫來操作
文件係統 599
18.15.1 復製、移動文件以及遍曆、
過濾目錄樹 600
18.15.2 查看ZIP壓縮文件 601
18.16 小結 602
18.17 思考題 603
第19章圖形用戶界麵 605
19.1 AWT組件和Swing組件 605
19.2創建圖形用戶界麵的
基本步驟 608
19.3布局管理器 610
19.3.1 FlowLayout(流式布局
管理器) 611
19.3.2 BorderLayout(邊界布局
管理器) 613
19.3.3 GridLayout(網格布局
管理器) 616
19.3.4 CardLayout(卡片布局
管理器) 619
19.3.5 GridBagLayout(網格包
布局管理器) 620
19.4事件處理 626
19.4.1 事件處理的軟件實現 626
19.4.2 事件源?事件和監聽器
的類層次和關係 632
19.5 AWT繪圖 637
19.5.1 Graphics類 639
19.5.2 Graphics2D類 644
19.6 AWT綫程(事件分派
綫程) 647
19.7小結 649
19.8思考題 650
第20章常用Swing組件 653
20.1 邊框(Border) 653
20.2 按鈕組件(AbstractButton)
及子類 654
20.3 文本框(JTextField) 657
20.4 文本區域(JTextArea)與
滾動麵闆(JScrollPane) 660
20.5 復選框(JCheckBox)與單選
按鈕(JRadioButton) 661
20.6 下拉列錶(JComboBox) 664
20.7 列錶框(JList) 665
20.8 頁簽麵闆(JTabbedPane) 667
20.9 菜單(JMenu) 669
20.10 對話框(JDialog) 674
20.11 文件對話框
(JFileChoose) 676
20.12 消息框 679
20.13 製作動畫 681
20.14 播放音頻文件 683
20.15 BoxLayout布局管理器 686
20.16 設置Swing界麵的外觀
和感覺 689
20.17 小結 691
20.18 思考題 692
第21章 Java常用類 693
21.1 Object類 693
21.2 String類和StringBuffer類 694
21.2.1 String類 694
21.2.2 “hello”與new String(“hello”)
的區彆 697
21.2.3 StringBuffer類 698
21.2.4 比較String類與
StringBuffer類 699
21.2.5 正則錶達式 701
21.2.6 格式化字符串 703
21.3 包裝類 707
21.3.1 包裝類的構造方法 707
21.3.2 包裝類的常用方法 708
21.3.3 包裝類的自動裝箱和拆箱 709
21.4 Math類 710
21.5 Random類 712
21.6 傳統的處理日期/時間的類 712
21.6.1 Date類 713
21.6.2 DateFormat類 713
21.6.3 Calendar類 715
21.7 新的處理日期/時間的類 716
21.7.1 LocalDate類 717
21.7.2 LocalTime類 718
21.7.3 LocalDateTime類 718
21.8 BigInteger類 719
21.9 BigDecimal類 720
21.10 用Optional類避免空指針
異常 722
21.11 小結 724
21.12 思考題 725
第22章 Annotation注解 727
22.1 自定義Annotation注解
類型 727
22.2 在類的源代碼中引用
注解類型 730
22.3 在程序中運用反射機製讀取
類的注解信息 732
22.4 基本內置注解 735
22.5 小結 736
22.6 思考題 736
前言/序言
Java語言的特點
Java應用如此廣泛是因為Java具有多方麵的優勢。其特點如下:
(1)麵嚮對象。Java自誕生之時就被設計成麵嚮對象的語言,而C++語言是一種強製麵嚮對象的語言。麵嚮對象可以說是Java最重要的特性,它不支持類似C語言那樣的麵嚮過程的程序設計技術。Java支持靜態和動態風格的代碼重用。
(2)跨平颱。對於Java程序,不管是Windows平颱還是UNIX平颱或是其他平颱,它都適用。Java編輯器把Java源程序編譯成與體係結構無關的字節碼指令,隻要安裝瞭Java運行係統,Java程序就可在任意的處理器上運行。這些字節碼指令由Java虛擬機來執行,Java虛擬機的解釋器得到字節碼後,對它進行轉換,使之能夠在不同的平颱運行。
(3)直接支持分布式的網絡應用。除瞭支持基本的語言功能,Java核心類庫還包括一個支持HTTP、SMTP和FTP等基於TCP/IP協議的類庫。因此,Java應用程序可憑藉URL打開並訪問網絡上的對象,其訪問方式與訪問本地文件係統幾乎完全相同。在Java齣現以前,為分布式環境尤其是Internet提供動態的內容無疑是一項非常宏偉、難以想象的任務,但Java的語言特性卻使我們很容易地達到瞭這個目標。
(4)安全性和健壯性。Java緻力於檢查程序在編譯和運行時的錯誤,類型檢查幫助檢查齣許多開發早期齣現的錯誤。Java 支持自動內存管理,這不但讓程序員減輕瞭許多負擔,也減少瞭程序員犯錯的機會。Java自己操縱內存減少瞭內存齣錯的可能性。Java還能夠檢測數組邊界,避免瞭覆蓋數據的可能。在Java語言裏,指針和釋放內存等功能均被拋棄,從而避免瞭非法內存操作的危險。
以上特點,是C++語言及其他語言無法比擬的(C++語言盡管也是麵嚮對象的,但並不是嚴格意義上的麵嚮對象的語言)。單從麵嚮對象的特性來看,Java類似於SmallTalk,但其他特性,尤其是適用於分布式計算環境的特性遠遠超越瞭SmallTalk。Java發展到現在,已經不僅僅是一種語言,可以說是一種技術,這個技術涉及網絡和編程等領域。另外,Java是非常簡單、高效的,有調查數據發現:用C++和Java來做一個相同功能的項目,用 Java寫的程序要比用C++寫的程序節省60%的代碼和66%的時間。可以說,用Java語言編程時間短、功能強,編程人員接手起來更容易、更簡便。
本書的組織結構和主要內容
本書以6條主綫貫穿全書:麵嚮對象編程思想、Java語言的語法、Java虛擬機執行Java程序的原理、在實際項目中的運用、設計模式和性能優化技巧。書的每一章都會圍繞若乾條主綫來展開內容,並且根據全書的布局,閤理安排每一章內容的深度。本書主要內容包括:麵嚮對象開發方法概述、第一個Java應用、數據類型和變量、操作符、流程控製、繼承、Java語言中的修飾符、接口、異常處理、類的生命周期、對象的生命周期、內部類、多綫程、數組、Java集閤、泛型、Lambda錶達式、輸入與輸齣(I/O)、圖形用戶界麵、常用Swing組件、Java常用類和Annotation注解。
這本書是否適閤您
在如今的Java領域,各種新技術、新工具層齣不窮,一方麵,每一種技術都會不停地升級換代,另一方麵,還會不斷湧現齣新的技術和工具。Java世界就像小時候玩的萬花筒,盡管實質上隻是由幾個普通的玻璃碎片組成的,但隻要輕輕一搖,就會變化齣韆萬種繽紛的圖案。Java世界如此變化多端,很容易讓初學Java的人有無從下手的感覺。常常會有讀者問我這樣的問題:
我學瞭Java已經一年多瞭,現在就隻能用JSP寫點東西,其他的東西實在太多瞭,我整天學都學不完,很迷茫,不知道該如何有針對性地去學,以找到一份Java工作,現在是睏死在Java裏瞭。
撰寫本書,目的之一是為瞭幫助讀者看清Java萬花筒的本質,從復雜的錶象中尋找普遍的規律,深刻理解Java的核心思想,隻有掌握瞭普遍的規律與核心思想,纔能以不變應萬變,輕輕鬆鬆地把握Java技術發展的新趨勢,迅速地領略並且會熟練運用一門新的技術,而不成為被動的追隨者,知其然而不知其所以然。
閱讀本書,讀者對Java的領悟將逐步達到以下境界:
熟悉Java語法,熟練地編譯和調試程序。
按照麵嚮對象的思想來快速理解JDK類庫,以及其他第三方提供的類庫,通過閱讀JavaDoc和相關文檔,知道如何正確地使用這些類庫。
按照麵嚮對象的思想來分析問題領域,設計對象模型。
在開發過程中會運用現有的一些優秀設計模式,提高開發效率。
當一個方法有多種實現方式時,能夠從可維護、可重用及性能優化的角度選擇最佳的實現方式。
理解Java虛擬機執行Java程序的原理,從而更深入地理解Java語言的各種特性和語法規則。
本書的技術支持網站
本書的技術支持網站為:www.javathinker.net。讀者可以在該網站交流Java技術,提齣本書的勘誤信息,作者會在本網站為讀者答疑。本書中實例源文件及思考題答案的下載網址為:www.javathinker.net/download.htm。
緻謝
本書在編寫過程中得到瞭Oracle公司在技術上的大力支持,電子工業齣版社少兒與藝術分社負責編輯審核。此外,復旦軟件學院的戴開宇等老師為本書的編寫提供瞭有益的幫助,JavaThinker.net網站的網友們為本書的升級提供瞭許多寶貴建議,在此錶示衷心的感謝!盡管我們盡瞭最大努力,但本書難免會有不妥之處,歡迎各界專傢和讀者朋友批評指正。
《精通Java:從入門到實踐》 一、 核心理念與適用人群 《精通Java:從入門到實踐》是一本旨在幫助讀者全麵掌握Java編程語言的書籍。本書不拘泥於單一的編程範式,而是將Java強大的麵嚮對象特性與函數式編程的現代思維相結閤,為讀者構建起紮實的Java基礎,並引導他們走嚮實際的項目開發。 本書的受眾廣泛,包括: 初學者: 對編程有濃厚興趣,希望學習一門主流、應用廣泛的編程語言的零基礎學習者。本書將從最基礎的語法概念講起,循序漸進,確保讀者能夠輕鬆入門。 有其他語言基礎的開發者: 已經掌握其他編程語言(如C++、Python、JavaScript等)的開發者,希望轉嚮Java生態係統,或者希望深入理解Java的特性和最佳實踐。本書將幫助您快速熟悉Java的語法和設計理念,並與您已有的知識體係建立聯係。 希望提升Java技能的開發者: 已經具備一定Java基礎,但希望係統性地梳理知識,深入理解麵嚮對象設計原則,掌握更高級的Java特性,或者對並發、網絡、數據庫等領域有進一步學習需求的開發者。本書將提供深度講解和實戰案例,幫助您邁嚮“精通”之路。 軟件架構師與技術負責人: 希望深入理解Java的底層原理,掌握如何設計齣可維護、可擴展、高性能的Java應用程序的專業人士。本書將探討一些更高級的主題,如JVM內部機製、性能調優、設計模式的應用等。 二、 內容體係與深度解析 本書的內容體係設計遵循從基礎到進階,再到實戰的邏輯順序,確保讀者能夠構建起完整而深入的Java知識體係。 第一部分:Java基礎與核心概念(奠定堅實根基) 1. Java語言概述與開發環境搭建: Java的誕生與發展: 簡要介紹Java的曆史、設計哲學(“一次編寫,到處運行”)及其在當今軟件開發中的重要地位。 JDK、JRE與JVM: 深入解釋Java運行環境的三個核心組成部分,以及它們如何協同工作。 開發環境配置: 詳細指導讀者完成JDK的安裝與配置,並介紹主流的集成開發環境(IDE),如Eclipse、IntelliJ IDEA、VS Code等,並提供基礎的IDE使用技巧。 第一個Java程序: 從“Hello, World!”齣發,講解Java程序的結構,包括`main`方法、類、包等基本概念。 2. Java基本語法與數據類型: 變量與常量: 講解變量的聲明、初始化、作用域,以及常量的定義與使用。 基本數據類型: 詳細介紹Java的八種基本數據類型(整型、浮點型、字符型、布爾型),包括它們的內存占用、取值範圍以及相互轉換。 運算符: 涵蓋算術運算符、關係運算符、邏輯運算符、位運算符、賦值運算符、三目運算符等,並講解運算符的優先級和結閤性。 控製流語句: 深入講解順序結構、選擇結構(`if-else`、`switch`)和循環結構(`for`、`while`、`do-while`、`foreach`),並通過豐富的示例演示其應用。 3. 字符串與數組: String類: 詳細介紹`String`類的常用方法,如字符串的創建、拼接、查找、替換、分割、比較等,並強調`String`對象的不可變性。 StringBuilder與StringBuffer: 講解這兩個可變字符串類的區彆與適用場景,以及它們在提高字符串操作性能方麵的優勢。 數組: 介紹一維數組和多維數組的聲明、初始化、訪問與遍曆,以及數組作為方法參數和返迴值的處理。 第二部分:麵嚮對象編程(OOP)精髓(掌握核心設計思想) 4. 類與對象: 封裝(Encapsulation): 講解如何將數據(屬性)和操作數據的方法(行為)封裝在類中,以及訪問修飾符(`public`、`private`、`protected`、默認)的作用,理解“數據隱藏”的意義。 構造方法(Constructor): 講解構造方法的定義、作用、重載,以及`this`關鍵字的應用,理解對象創建的過程。 方法(Method): 介紹方法的定義、參數傳遞(值傳遞)、返迴值,以及方法的重載(Overloading)。 5. 繼承(Inheritance): `extends`關鍵字: 講解子類如何繼承父類的屬性和方法,理解“is-a”關係。 方法重寫(Overriding): 介紹子類如何重新實現父類的方法,並講解`@Override`注解的使用。 `super`關鍵字: 講解如何在子類中調用父類的構造方法和方法。 多態(Polymorphism): 深入剖析多態的三個主要體現形式:方法重載、方法重寫和嚮上轉型。講解多態的優勢,如代碼的靈活性和可擴展性。 6. 抽象(Abstraction): 抽象類(Abstract Class): 講解抽象類的定義、抽象方法的概念,以及如何通過抽象類強製子類實現特定行為。 接口(Interface): 詳細介紹接口的定義、作用,以及接口的成員(常量、抽象方法、默認方法、靜態方法、私有方法)。講解接口與抽象類的區彆,以及接口在定義契約方麵的關鍵作用。 `implements`關鍵字: 講解類如何實現一個或多個接口。 7. 其他麵嚮對象特性: `static`關鍵字: 講解靜態成員(變量和方法)的特點,以及它們與對象實例的區彆。 `final`關鍵字: 介紹`final`關鍵字在修飾變量、方法和類時的作用,理解其“不可變”的特性。 包(Package): 講解包的創建、導入(`import`)和包的訪問控製。 枚舉(Enum): 介紹枚舉類型的定義與使用,理解其在錶示一組命名常量時的優勢。 第三部分:Java高級特性與API(深化技能,拓展應用) 8. 異常處理(Exception Handling): 異常體係結構: 介紹Java異常類的繼承體係,理解`Throwable`、`Error`和`Exception`的區彆。 Checked Exception與Unchecked Exception: 講解兩者的區彆以及如何在代碼中處理。 `try-catch-finally`語句塊: 詳細演示如何使用`try-catch-finally`來捕獲和處理異常。 `throws`與`throw`關鍵字: 講解如何聲明方法可能拋齣的異常,以及如何在方法中主動拋齣異常。 自定義異常: 指導讀者如何創建自己的異常類。 9. 集閤框架(Collections Framework): 框架概述: 介紹Java集閤框架的整體結構,包括`Collection`接口、`Map`接口及其子接口和實現類。 List接口: 深入講解`ArrayList`、`LinkedList`的特點、常用方法以及性能差異。 Set接口: 介紹`HashSet`、`LinkedHashSet`、`TreeSet`的特點和應用場景。 Map接口: 詳細講解`HashMap`、`LinkedHashMap`、`TreeMap`的鍵值對存儲機製、常用方法和性能考量。 迭代器(Iterator): 講解如何使用迭代器遍曆集閤,以及`ListIterator`的特有功能。 泛型(Generics): 深入理解泛型的概念,講解泛型類、泛型接口、泛型方法的定義與使用,以及通配符(`?`)的用法,強調泛型在類型安全方麵的優勢。 10. 輸入/輸齣(I/O)流: 流的分類: 講解字節流(`InputStream`、`OutputStream`)和字符流(`Reader`、`Writer`)的區彆。 常用流類: 介紹`FileInputStream`、`FileOutputStream`、`BufferedReader`、`BufferedWriter`、`FileReader`、`FileWriter`等類的用法。 緩衝流與轉換流: 講解緩衝流(如`BufferedInputStream`)提高I/O效率的原理,以及轉換流(如`InputStreamReader`)在處理字節與字符轉換時的作用。 NIO(New I/O): 簡要介紹NIO的概念、優勢(如通道`Channel`、緩衝區`Buffer`、選擇器`Selector`),為後續深入學習打下基礎。 11. 多綫程(Multithreading): 綫程的創建: 講解通過繼承`Thread`類和實現`Runnable`接口創建綫程的兩種方式。 綫程的生命周期: 介紹綫程的各個狀態(新建、就緒、運行、阻塞、終止)及其轉換。 綫程同步: 講解綫程安全問題,以及`synchronized`關鍵字、`Lock`接口(如`ReentrantLock`)等同步機製的應用。 綫程通信: 介紹`wait()`、`notify()`、`notifyAll()`等方法在綫程間通信中的作用。 並發工具類: 介紹`ExecutorService`(綫程池)、`CountDownLatch`、`Semaphore`等高級並發工具。 12. 網絡編程: TCP/IP協議基礎: 簡要迴顧TCP和UDP協議的基本概念。 Socket編程: 講解`Socket`(客戶端)和`ServerSocket`(服務器端)類的使用,實現基本的客戶端-服務器通信。 URL與URLConnection: 介紹如何使用`URL`類訪問網絡資源,以及`URLConnection`類進行更精細的網絡通信控製。 第四部分:Java新特性與實踐(擁抱現代化Java) 13. Lambda錶達式與函數式接口: Lambda錶達式入門: 介紹Lambda錶達式的語法,以及它如何簡化匿名內部類的編寫。 函數式接口: 講解什麼是函數式接口,以及`@FunctionalInterface`注解的作用。 常用函數式接口: 介紹`Consumer`、`Supplier`、`Predicate`、`Function`等JDK 8提供的函數式接口。 Stream API: 深入講解Stream API,包括中間操作(`filter`、`map`、`sorted`等)和終端操作(`forEach`、`collect`、`reduce`等),以及Stream API在數據處理中的強大能力。 14. Java 8+ 新特性迴顧: Optional類: 講解`Optional`如何幫助避免`NullPointerException`,提高代碼的可讀性。 日期與時間API(java.time): 介紹新的日期時間API(如`LocalDate`、`LocalTime`、`LocalDateTime`、`Instant`、`Duration`、`Period`),及其相較於舊API的優勢。 方法引用(Method References): 講解方法引用的不同形式,及其與Lambda錶達式的結閤使用。 第五部分:進階主題與項目實戰(學以緻用) 15. 反射(Reflection): 反射機製: 講解如何通過反射在運行時動態地獲取類的信息、創建對象、調用方法和訪問屬性。 反射的應用場景: 探討反射在框架開發、單元測試、序列化等方麵的應用。 16. 設計模式(Design Patterns): 設計模式概述: 介紹設計模式的分類(創建型、結構型、行為型)和重要性。 經典設計模式解析: 選取並詳細講解一些最常用且實用的設計模式,如單例模式、工廠模式、建造者模式、觀察者模式、策略模式、裝飾器模式等,並結閤Java代碼演示其實現與應用。 17. 構建工具與項目管理: Maven與Gradle: 介紹這兩個主流的Java項目構建工具,講解依賴管理、生命周期、插件等概念,並通過實例演示如何創建、構建和管理Java項目。 18. 單元測試與集成測試: JUnit框架: 講解如何使用JUnit編寫和執行單元測試,包括測試方法、斷言、測試注解等。 測試驅動開發(TDD)理念: 簡要介紹TDD的基本思想。 19. 數據庫連接(JDBC): JDBC API: 講解如何使用JDBC API連接數據庫,執行SQL語句,處理結果集。 連接池: 介紹數據庫連接池的概念及其重要性,並簡要介紹常用連接池(如Druid、C3P0)的配置。 20. 實戰項目演練: 本書將貫穿多個小型實戰項目,例如: 簡單的圖書管理係統: 結閤麵嚮對象、集閤、文件I/O等知識。 在綫聊天室: 演示網絡編程和多綫程的應用。 數據分析工具: 利用Stream API和文件處理。 Web應用程序基礎: (可選,根據書籍定位)簡要介紹Servlet/JSP或Spring Boot入門,展示Java在Web開發中的應用。 通過這些項目,讀者將有機會將所學知識融會貫通,並理解如何在實際開發中應用Java技術。 三、 特色與亮點 循序漸進,由淺入深: 本書的章節安排邏輯清晰,從基礎語法到高級特性,層層遞進,確保讀者能夠穩步提升。 理論與實踐結閤: 每一章節都配有大量的代碼示例,清晰地展示概念的應用,並輔以練習題和實戰項目,幫助讀者鞏固所學。 注重代碼質量與最佳實踐: 在講解過程中,本書不僅關注“如何實現”,更強調“如何寫齣高質量、易於維護的代碼”,並融入業界通行的編碼規範和設計原則。 覆蓋現代Java特性: 重點講解Java 8及之後版本的重要新特性,如Lambda錶達式、Stream API、Optional等,使讀者能夠掌握當前主流的Java開發方式。 深入原理,觸類旁通: 在講解關鍵概念時,會適當地觸及底層原理(如JVM內存模型、垃圾迴收機製的簡述),幫助讀者建立更深刻的理解,為解決復雜問題和性能優化打下基礎。 語言生動,易於理解: 采用通俗易懂的語言,結閤類比和圖示,化繁為簡,降低學習難度。 四、 結語 《精通Java:從入門到實踐》將成為您學習Java的理想夥伴。通過係統性的學習和大量的實踐,您將能夠自信地運用Java語言解決現實世界中的各種編程挑戰,為您的技術之路打下堅實的基礎,並為未來的職業發展開啓無限可能。