Java 面向對象編程, 2/e

孫衛琴

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

商品描述

<內容簡介>

本書採用由淺入深、與實際應用緊密結合的方式,利用大量經典實用的實例,詳細講解Java面向對象的編程思想、編程語法和設計模式,介紹常見Java類庫的用法,總結優化Java編程的各種寶貴經驗,深入闡述Java虛擬機執行Java程序的原理。本書的實例都基於最新的JDK8版本。本書的最大特色是以6條主線貫穿書:面向對象編程思想、Java語言的語法、Java虛擬機執行Java程序的原理、在實際項目中的運用、設計模式和性能優化技巧。另外,本書還貫穿了Oracle公司的OCJP(Oracle Certified Java Programmer)認證的考試要點。

 

<章節目錄>

第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

目錄大綱