前言 根據TIOBE開發語言排行榜2016年4月公布的流行開發語言的排名結果,Java語言再次位居榜首。同時,由于Java語言“一次編寫,到處運行”的特點,使其在近年來國內外的軟件開發企業中的使用比例排名第一。 Java語言是一種廣為使用的面向對象編程語言,其設計思想代表了目前最為先進的高級語言程序設計思想。Java語言是一種具有“簡單、面向對象、分布式、解釋型、健壯性(魯棒性)、安全、平臺無關、可移植、高性能、多線程和動態執行”等特性的語言,是一種獨立于平臺的網絡編程語言。在計算機技術發展到當前的互聯網時代,Java已經不僅僅是一種語言,還可以說是一種技術,這種技術涉及網絡、編程、嵌入式等各個領域。 本書主要介紹Java語言基礎、結構化編程思想、面向對象編程思想、圖形化用戶界面技術、異常處理技術、數組、I/O流技術、并發控制技術、數據庫和網絡編程等基礎內容,以及JDK 6及后續版本中包含的容器、泛型和注解等高級技術。通過閱讀本書,讀者可以全面掌握面向對象程序設計的基本方法,領會Java語言的基本思想,掌握Java語言技術的相關內容,了解和理解蘊含在Java語言中的軟件工程的基本設計思想。 本書可作為高等院校計算機及相關專業本科生Java程序設計的教材,也可作為軟件開發工程師與相關技術人員的自學參考書。Java程序設計課程的教學以課堂教學為主,通過對Java的基本語法與相關技術的講解,使學生充分掌握Java語言的基本概念、基本知識、基本內容,了解和掌握Java語言的程序設計手段,在完成學習之后具備較強的程序設計能力。堅持“既講語言,又講技術,語言為線,技術為面,相輔相成”的指導思想,保證Java語言的語法和程序設計技術并重,力求在清楚講解Java語言編程技術的基礎上,傳授Java編程思想和設計模式。在課堂教學的同時,安排適當數量的實驗教學,使學生在學好基本理論和基礎知識的同時,能夠得到充分的實踐機會,以驗證課堂講解的知識,開拓編程思路,切實鍛煉和提高學生的程序設計能力。 本書分為12章,主要內容如下: 第1章Java語言基礎。計劃2學時,可擴展為3學時。這一章介紹Java語言的發展史、特征、運行機制、Java程序的基本結構,以及JDK、Eclipse等Java開發工具的使用。 第2章 結構化程序設計基礎。計劃3學時,可擴展為4學時。這一章介紹標識符、關鍵字、數據類型、操作符、表達式、語句和控制流程等。 第3章 Java類與對象。計劃3學時,可擴展為4學時。這一章介紹Java語言的基本程序設計方法和面向對象程序設計思想。 第4章 類的復用和抽象。計劃6學時。這一章介紹類的復用、繼承、多態、接口,以及內部類。 第5章 圖形化用戶界面。計劃4學時,可擴展為6學時。這一章介紹Java語言圖形化用戶界面設計方法、圖形化組件類的使用、圖形化用戶界面的構建與布局管理器,以及事件處理機制。 第6章 異常處理。計劃2學時,可擴展為4學時。這一章介紹異常處理的概念和機制,以及異常處理的兩種方式。 第7章 對象的容納。計劃4學時,可擴展為6學時。這一章介紹數組、枚舉與容器的基本概念,使得學生掌握如何根據實際需求選定不同對象容器。 第8章 I/O流。計劃2學時,可擴展為4學時。這一章介紹字節/字符流、I/O流、節點流、處理流,以及其相關類的使用。 第9章 并發控制。計劃2學時,可擴展為4學時。這一章介紹創建線程的兩種方法、線程的生命周期,以及同步和協作的線程并發控制技術。 第10章 數據庫應用。計劃2學時,可擴展為3學時。這一章介紹DBMS相關概念、基本SQL語句、JDBC數據庫編程技術,以及ORM模式。 第11章 網絡應用。計劃2學時,可擴展為3學時。這一章介紹網絡編程相關類,以及TCP/UDP網絡編程技術。 第12章 注解。為可選章節,可擴展1學時。 本課程建議講授32學時,可擴展為48學時,擴展內容在目錄中用*號標注。如有條件可增加16學時的實驗教學環節。 為配合課堂教學,編者精心制作了各章的課件,圖文并茂地展示了編者的教學思想,讀者可從hzbook.com上下載。書中還列舉了豐富的實例程序,這些程序均在JDK和Eclipse環境下測試運行通過。 本書的編寫組是由吉林大學多年講授“Java程序設計”課程的教師,以及從事Java項目開發的教師組成,尤其感謝周柚和杜偉老師等為本教程的選材和編寫所付出的辛勤勞動。本書第1版為吉林大學本科“十二五”規劃教材,第2版在第1版的基礎上擴展了Java教學體系參考、泛型擴展、GUI可視化編程等內容,并已列為吉林大學本科“十三五”規劃教材。 由于作者水平有限,加之時間緊迫,本書內容雖經過多次修改,仍難免存在疏漏和錯誤之處,懇請廣大師生和讀者給予批評指正。 編者2016年5月
前 言
第1章 Java語言基礎 1
1.1 Java概述 1
1.1.1 Java起源 1
1.1.2 Java的版本 4
1.1.3 Java語言的特征 5
1.1.4 Java Application與Java Applet 8
1.1.5 Java與C/C++的比較 9
1.1.6 類庫與API文檔 10
1.1.7 Java教學體系探索 11
1.2 Java程序結構與運行機制 11
1.2.1 一個簡單的Java程序 12
1.2.2 Java運行機制 13
1.3 Java開發環境 15
1.3.1 JDK 15
1.3.2 Eclipse 16
1.3.3 NetBeans 17
1.3.4 其他 17
1.4 Java編程參考 18
1.4.1 Java編程規范 18
1.4.2 Java幫助文檔 18
1.4.3 Java相關討論和社區 18
本章小結 19
習題 19
實驗 20
第2章 結構化程序設計基礎 21
2.1 標識符、關鍵字和數據類型 21
2.1.1 標識符 21
2.1.2 關鍵字 22
2.1.3 數據類型 23
2.1.4 常量 25
2.1.5 變量的聲明和初始化 26
2.2 操作符 27
2.2.1 賦值操作符 27
2.2.2 數學操作符 28
2.2.3 關系操作符 29
2.2.4 邏輯操作符 30
2.2.5 位操作符和位移操作符 31
2.2.6 字符串操作符 32
2.2.7 類型轉換操作符 32
2.2.8 三元條件操作符 33
2.2.9 Java語言操作符的優先級與結合性 34
2.3 表達式與語句 35
2.3.1 表達式 35
2.3.2 語句與語句塊 35
2.4 控制流程 36
2.4.1 順序結構 36
2.4.2 選擇結構 36
2.4.3 循環結構 38
2.4.4 break語句和continue語句 39
2.4.5 return語句 41
本章小結 41
習題 41
實驗 42
第3章 Java類與對象 43
3.1 面向對象的基本概念 43
3.2 Java類 45
3.2.1 類的定義 45
3.2.2 變量成員與方法成員 46
3.2.3 訪問控制符 50
3.2.4 構造方法 51
3.2.5 終結處理方法 52
3.3 Java對象 53
3.3.1 對象的創建 53
3.3.2 對象初始化 54
3.3.3 成員初始化次序 56
3.3.4 垃圾回收機制 57
3.4 包:庫單元 58
3.4.1 命名空間 58
3.4.2 package語句 59
3.4.3 import語句 60
3.5 Java標準類庫 61
3.5.1 Java常用包:java.lang包、java.util包 61
3.5.2 Object類 63
3.5.3 System類 64
3.5.4 Math類 64
3.5.5 String類、StringBuffer類和StringBuilder類 65
本章小結 70
習題 70
實驗 71
第4章 類的復用和抽象 72
4.1 面向對象基本機制 72
4.2 類的復用 73
4.2.1 合成與聚合 74
4.2.2 繼承 76
4.2.3 重寫與重載 79
4.2.4 abstract和final 83
4.2.5 this和super 84
4.3 多態 86
4.3.1 向上轉型 87
4.3.2 多態性 88
4.3.3 運行時綁定 89
4.3.4 多態的實現方法 91
4.4 接口 94
4.4.1 接口的定義 94
4.4.2 接口的設計思想 95
4.4.3 接口的應用 97
4.5 內部類 99
4.5.1 內部類的定義和特性 100
4.5.2 其他類型的內部類 102
4.5.3 內部類與外部類的關系 107
本章小結 112
習題 112
實驗 114
第5章 圖形化用戶界面 115
5.1 圖形化用戶界面概述 115
5.1.1 Swing與AWT 116
5.1.2 GUI組件類層次結構 116
5.1.3 Swing組件 117
5.2 常用組件 118
5.2.1 JFrame窗體 118
5.2.2 JLabel標簽 120
5.2.3 JButton按鈕 121
5.2.4 JTextField文本框 123
*5.2.5 其他常用組件 125
5.3 布局管理 125
5.3.1 FlowLayout順序布局 126
5.3.2 BorderLayout邊界布局 127
5.3.3 GridLayout網格布局 128
*5.3.4 CardLayout卡片布局 129
*5.3.5 GridBagLayout網格塊布局 131
5.4 事件 131
5.4.1 事件處理機制 131
5.4.2 事件類與事件監聽接口 134
5.4.3 常用事件處理 137
5.4.4 事件適配器 140
*5.5 Java的GUI可視化編程 142
5.5.1 WindowBuilder插件的下載及安裝 143
5.5.2 開發可視化GUI工程 144
本章小結 146
習題 146
實驗 146
第6章 異常處理 148
6.1 異常概述 148
6.1.1 異常與錯誤 148
6.1.2 標準異常類 150
*6.1.3 常見異常與錯誤 152
6.2 異常處理方法 153
6.2.1 捕獲和處理異常 154
6.2.2 異常的拋出 156
6.2.3 異常傳遞鏈 157
6.2.4 異常處理原則 159
6.3 自定義異常 159
6.3.1 自定義異常的創建 159
6.3.2 拋出異常對象 159
6.3.3 自定義異常拋出與捕獲 161
*6.3.4 異常轉型 163
本章小結 164
習題 164
實驗 165
第7章 對象的容納 166
7.1 數組 166
7.1.1 數組創建、初始化和使用 167
7.1.2 多維數組 167
7.1.3 數組和數組引用 168
7.1.4 數組的工具類Arrays 169
7.1.5 對象比較 170
7.2 枚舉 171
7.2.1 枚舉的定義 172
7.2.2 枚舉的使用 172
7.3 容器 173
7.3.1 List 173
7.3.2 泛型 178
7.3.3 Set 181
7.3.4 Map 188
7.3.5 容器的Collections工具類 193
7.3.6 容器的選擇 195
*7.4 Java泛型擴展 196
7.4.1 無界通配符“?” 196
7.4.2 通配符上界“? extends T” 197
7.4.3 通配符下界“? super T” 199
本章小結 200
習題 201
思考題 201
實驗 201
第8章 I/O流 202
8.1 流與相關類 202
8.1.1 流的概念 202
8.1.2 字節流及其方法 203
8.1.3 字符流及其方法 207
*8.1.4 節點流與處理流 211
8.2 標準I/O流 215
8.3 文件I/O流 217
8.3.1 File類 217
8.3.2 基于字節的文件流 219
8.3.3 基于字符的文件流 221
*8.4 隨機訪問文件 223
*8.5 壓縮 224
本章小結 226
習題 226
實驗 226
第9章 并發控制 227
9.1 多任務系統介紹 227
9.2 Java多線程的概念 229
9.2.1 Java語言中多線程的作用 229
9.2.2 線程的創建 230
9.2.3 線程的生命周期 232
9.2.4 線程的優先級 233
9.3 線程之間的協作 234
9.3.1 同步區域 235
9.3.2 協作機制 236
9.3.3 死鎖 238
*9.4 擴展模型 239
9.4.1 ReentrantLock鎖 239
9.4.2 await/signal協作機制 240
本章小結 241
習題 241
實驗 242
第10章 數據庫應用 243
10.1 數據庫基礎 243
10.1.1 常用的關系數據庫 243
10.1.2 SQL語言簡介 245
10.2 JDBC概述 246
10.2.1 JDBC驅動程序接口 246
10.2.2 JDBC應用程序接口 247
10.3 JDBC編程步驟 248
10.4 一個簡單的JDBC操作數據庫程序 248
10.5 對象關系映射概述 251
10.5.1 ORM的概念 252
10.5.2 ORM技術特點 252
10.5.3 流行的ORM框架簡介 252
10.5.4 Hibernate簡介 253
本章小結 253
習題 254
實驗 254
第11章 網絡應用 255
11.1 InetAddress類 256
11.2 ServerSocket類和Socket類 258
11.3 DatagramSocket類 262
本章小結 265
習題 265
實驗 265
*第12章 注解 266
12.1 注解的語法 267
12.2 注解的使用 268
12.3 JUnit4中注解的使用 270
本章小結 271
習題 272
參考文獻 273