第1章麵嚮對象開發方法概述1
1.1結構化的軟件開發方法簡介3
1.2麵嚮對象的軟件開發方法簡介6
1.2.1對象模型6
1.2.2UML:可視化建模語言7
1.2.3RationalRose:可視化建模工具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.4UML語言簡介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.1Java源文件結構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.1JDK簡介以及安裝方法58
2.2.2編譯Java源文件60
2.2.3運行Java程序62
2.2.4給Java應用打包65
2.3使用和創建JavaDoc文檔66
2.3.1JavaDoc標記68
2.3.2javadoc命令的用法73
2.4Java虛擬機運行Java程序的基本原理75
2.5小結77
2.6思考題78
第3章數據類型和變量81
3.1基本數據類型82
3.1.1boolean類型82
3.1.2byte、short、int和long類型83
3.1.3char類型與字符編碼85
3.1.4float和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對象的默認引用:this103
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.8instanceof操作符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.1ifelse語句146
5.1.2switch語句150
5.2循環語句154
5.2.1while語句154
5.2.2dowhile語句156
5.2.3for語句158
5.2.4foreach語句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.5super關鍵字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.2abstract修飾符212
7.3final修飾符214
7.3.1final類215
7.3.2final方法215
7.3.3final變量216
7.4static修飾符220
7.4.1static變量220
7.4.2static方法223
7.4.3static代碼塊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.1Java異常處理機製概述262
9.1.1Java異常處理機製的優點262
9.1.2Java虛擬機的方法調用棧264
9.1.3異常處理對性能的影響267
9.2運用Java異常處理機製267
9.2.1try—catch語句:捕獲異常267
9.2.2finally語句:任何情況下必須執行的代碼268
9.2.3throws子句:聲明可能會齣現的異常270
9.2.4throw語句:拋齣異常271
9.2.5異常處理語句的語法規則271
9.2.6異常流程的運行過程274
9.2.7跟蹤丟失的異常278
9.3Java異常類280
9.3.1運行時異常282
9.3.2受檢查異常(CheckedException)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.1Java虛擬機及程序的生命周期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.3URLClassLoader類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.1Java綫程的運行機製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.14ThreadLocal類443
13.15concurrent並發包445
13.15.1用於綫程同步的Lock外部鎖446
13.15.2用於綫程通信的Condition條件接口447
13.15.3支持異步計算的Callable接口和Future接口450
13.15.4通過綫程池來高效管理多個綫程452
13.15.5BlockingQueue阻塞隊列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數組實用類:Arrays477
14.12用符號“…”聲明數目可變參數480
14.13小結481
14.14思考題481
第15章Java集閤485
15.1Collection和Iterator接口486
15.2集閤中直接加入基本類型數據489
15.3Set(集)490
15.3.1Set的一般用法490
15.3.2HashSet類491
15.3.3TreeSet類493
15.4List(列錶)497
15.4.1訪問列錶的元素498
15.4.2為列錶排序498
15.4.3ListIterator接口499
15.4.4獲得固定長度的List對象500
15.4.5比較Java數組和各種List的性能500
15.5Queue(隊列)503
15.5.1Deque(雙嚮隊列)504
15.5.2PriorityQueue(優先級隊列)505
15.6Map(映射)505
15.7HashSet和HashMap的負載因子507
15.8集閤實用類:Collections508
15.9綫程安全的集閤510
15.10集閤與數組的互換511
15.11集閤的批量操作512
15.12曆史集閤類513
15.13枚舉類型517
15.13.1枚舉類型的構造方法519
15.13.2EnumSet類和EnumMap類520
15.14小結521
15.15思考題521
第16章泛型523
16.1Java集閤的泛型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.1Lambda錶達式的基本用法533
17.2用Lambda錶達式代替內部類534
17.3Lambda錶達式和集閤的forEach()方法535
17.4用Lambda錶達式對集閤進行排序536
17.5Lambda錶達式與StreamAPI聯閤使用537
17.6Lambda錶達式可操縱的變量作用域539
17.7Lambda錶達式中的方法引用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管道輸入流:PipedInputStream551
18.2.4順序輸入流:SequenceInputStream類552
18.3過濾輸入流:FilterInputStream552
18.3.1裝飾器設計模式553
18.3.2過濾輸入流的種類554
18.3.3DataInputStream類555
18.3.4BufferedInputStream類556
18.3.5PushbackInputStream類557
18.4輸齣流557
18.4.1字節數組輸齣流:ByteArrayOutputStream類557
18.4.2文件輸齣流:FileOutputStream558
18.5過濾輸齣流:FilterOutputStream559
18.5.1DataOutputStream559
18.5.2BufferedOutputStream559
18.5.3PrintStream類561
18.6Reader/Writer概述563
18.7Reader類565
18.7.1字符數組輸入流:CharArrayReader類566
18.7.2字符串輸入流:StringReader類566
18.7.3InputStreamReader類567
18.7.4FileReader類568
18.7.5BufferedReader類568
18.8Writer類568
18.8.1字符數組輸齣流:CharArrayWriter類569
18.8.2OutputStreamWriter類570
18.8.3FileWriter類572
18.8.4BufferedWriter類573
18.8.5PrintWriter類573
18.9標準I/O574
18.9.1重新包裝標準輸入和輸齣574
18.9.2標準I/O重定嚮575
18.10隨機訪問文件類:RandomAccessFile576
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文件映射緩衝區:MappedByteBuffer586
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.1AWT組件和Swing組件605
19.2創建圖形用戶界麵的基本步驟608
19.3布局管理器610
19.3.1FlowLayout(流式布局管理器)611
19.3.2BorderLayout(邊界布局管理器)613
19.3.3GridLayout(網格布局管理器)616
19.3.4CardLayout(卡片布局管理器)619
19.3.5GridBagLayout(網格包布局管理器)620
19.4事件處理626
19.4.1事件處理的軟件實現626
19.4.2事件源﹑事件和監聽器的類層次和關係632
19.5AWT繪圖637
19.5.1Graphics類639
19.5.2Graphics2D類644
19.6AWT綫程(事件分派綫程)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.15BoxLayout布局管理器686
20.16設置Swing界麵的外觀和感覺689
20.17小結691
20.18思考題692
第21章Java常用類693
21.1Object類693
21.2String類和StringBuffer類694
21.2.1String類694
21.2.2“hello”與newString(“hello”)的區彆697
21.2.3StringBuffer類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.4Math類710
21.5Random類712
21.6傳統的處理日期/時間的類712
21.6.1Date類713
21.6.2DateFormat類713
21.6.3Calendar類715
21.7新的處理日期/時間的類716
21.7.1LocalDate類717
21.7.2LocalTime類718
21.7.3LocalDateTime類718
21.8BigInteger類719
21.9BigDecimal類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
· · · · · · (
收起)