前 言
Java語(yǔ)言具有純粹的面向?qū)ο蟮奶攸c(diǎn),非常適合于面向?qū)ο蟪绦蛟O(shè)計(jì)的學(xué)習(xí)。本書(shū)面向有一定的程序設(shè)計(jì)語(yǔ)言基礎(chǔ)的讀者,全面介紹Java語(yǔ)言的面向?qū)ο缶幊膛c設(shè)計(jì)技術(shù)。在第2版的基礎(chǔ)上,基于Java語(yǔ)言新引入的特性,結(jié)合作者工程實(shí)踐基礎(chǔ)和20余年的Java面向?qū)ο蟪绦蛟O(shè)計(jì)課程的教學(xué)經(jīng)驗(yàn),對(duì)教材內(nèi)容進(jìn)行了新的修訂,并增加了涵蓋課程內(nèi)容的32課時(shí)的微課視頻。全書(shū)內(nèi)容共分12章。
第1章概述了Java發(fā)展、平臺(tái)、開(kāi)發(fā)環(huán)境,從實(shí)例程序出發(fā)介紹Java語(yǔ)言的基本語(yǔ)法,包括標(biāo)識(shí)符與關(guān)鍵字、數(shù)據(jù)類(lèi)型、變量與賦值、運(yùn)算符與表達(dá)式、枚舉類(lèi)型、流程控制語(yǔ)句等。
第2章從面向?qū)ο蟮母拍畛霭l(fā),描述了類(lèi)和對(duì)象在Java語(yǔ)言中的實(shí)現(xiàn),介紹了類(lèi)的封裝、方法重載、類(lèi)成員和實(shí)例成員、包的基本概念及UML類(lèi)圖等技術(shù)。
第3章介紹面向?qū)ο蟪绦蛟O(shè)計(jì)的繼承和多態(tài)兩個(gè)重要特征,描述了Java語(yǔ)言中類(lèi)繼承的實(shí)現(xiàn)、類(lèi)中成員的訪問(wèn)權(quán)限控制、抽象類(lèi)和接口、多態(tài)及設(shè)計(jì)模式。
第4章介紹Java的數(shù)組和字符串編程,包括數(shù)組創(chuàng)建、數(shù)組初始化、數(shù)組相關(guān)操作、多維數(shù)組、可變長(zhǎng)參數(shù)、字符串、命令行參數(shù)等內(nèi)容。
第5章講解泛型與集合框架,泛型編程技術(shù)包括泛型類(lèi)、泛型方法、泛型類(lèi)的繼承、通配符的使用等相關(guān)技術(shù);集合框架包括集合核心接口、具體實(shí)現(xiàn)類(lèi)和集合算法等內(nèi)容。
第6章介紹Java的異常處理,包括異常機(jī)制、處理方法、自定義異常類(lèi)及其使用、斷言及日志機(jī)制。
第7章描述Java多任務(wù)編程,包括線程的概念、實(shí)現(xiàn)、控制、同步、線程池、死鎖等內(nèi)容。
第8章講述Java的輸入/輸出處理,包括流的概念、字節(jié)流、字符流、命令行I/O、格式化I/O、對(duì)象序列化、文件I/O等的應(yīng)用。
第9章講解基于Swing的GUI編程,包括容器、組件、布局管理器、事件處理和多媒體處理等內(nèi)容。
第10章介紹Java的網(wǎng)絡(luò)編程技術(shù),包括網(wǎng)絡(luò)編程的基本概念、Java網(wǎng)絡(luò)相關(guān)類(lèi)、TCP通信、UDP通信、使用URL進(jìn)行網(wǎng)絡(luò)通信的方法,以及與服務(wù)器端交互等具體應(yīng)用。
第11章介紹Java訪問(wèn)數(shù)據(jù)庫(kù)的編程技術(shù),包括SQL語(yǔ)言基礎(chǔ)、JDBC、SQLite數(shù)據(jù)庫(kù)等的具體應(yīng)用。
第12章介紹使用第三方類(lèi)庫(kù)的編程技術(shù),包括Maven構(gòu)建工具的使用、常用的第三方類(lèi)庫(kù)、通過(guò)第三方類(lèi)庫(kù)實(shí)現(xiàn)JSON數(shù)據(jù)操作、生成統(tǒng)計(jì)圖、處理Word文件等實(shí)用性應(yīng)用功能的開(kāi)發(fā)。
本書(shū)定位于面向?qū)ο蟪绦蛟O(shè)計(jì)的教學(xué),因此對(duì)Java語(yǔ)言的相關(guān)特性做了取舍。例如,函數(shù)式編程僅引入了Lambda表達(dá)式,并未展開(kāi)對(duì)Stream API、函數(shù)式接口等內(nèi)容的詳細(xì)描述;對(duì)于Java的反射、正則表達(dá)式、JavaFX等內(nèi)容也沒(méi)有涉及。本書(shū)對(duì)Java的后繼學(xué)習(xí)給出了一些建議,有興趣的讀者可掃描下方二維碼。
本書(shū)第1、4、5、6、10、11、12章由陳旭東編寫(xiě)和修訂,第2、3、7、8、9章由馬迪芳編寫(xiě)和修訂。徐保民和魏小濤對(duì)本書(shū)內(nèi)容提出了建設(shè)性的意見(jiàn)并參與了相關(guān)案例的選擇和代碼的調(diào)試。全書(shū)最后由陳旭東負(fù)責(zé)定稿。
本書(shū)的出版得到了北京交通大學(xué)出版社譚文芳老師的大力支持,北京交通大學(xué)繼續(xù)教育學(xué)院為課程內(nèi)容的微課錄制和編輯提供了極大的幫助,北京交通大學(xué)軟件學(xué)院、計(jì)算機(jī)與信息技術(shù)學(xué)院、網(wǎng)絡(luò)空間安全學(xué)院、繼續(xù)教育學(xué)院相關(guān)課程的老師也對(duì)本書(shū)的編寫(xiě)提出了寶貴意見(jiàn),在此表示深深的謝意。
本書(shū)內(nèi)容可能存在不足和錯(cuò)誤,懇請(qǐng)各位讀者不吝賜教。聯(lián)系作者的電子郵箱為:chenxd@bjtu.edu.cn(陳旭東)和dfma@bjtu.edu.cn(馬迪芳)。
編 者
2025年10月
目 錄
第1章 Java語(yǔ)言基礎(chǔ)1
1.1 Java語(yǔ)言簡(jiǎn)介1
1.1.1 Java發(fā)展1
1.1.2 Java平臺(tái)2
1.1.3 Java開(kāi)發(fā)環(huán)境2
1.2 簡(jiǎn)單的Java程序4
1.2.1 編輯Java源文件4
1.2.2 編譯源程序4
1.2.3 運(yùn)行Java應(yīng)用程序5
1.2.4 程序分析5
1.3 關(guān)鍵字與標(biāo)識(shí)符8
1.3.1 關(guān)鍵字8
1.3.2 標(biāo)識(shí)符8
1.4 數(shù)據(jù)類(lèi)型9
1.4.1 整數(shù)類(lèi)型10
1.4.2 浮點(diǎn)類(lèi)型10
1.4.3 字符類(lèi)型10
1.4.4 布爾類(lèi)型11
1.5 變量聲明與賦值11
1.6 運(yùn)算符與表達(dá)式12
1.6.1 算術(shù)運(yùn)算12
1.6.2 關(guān)系運(yùn)算12
1.6.3 布爾運(yùn)算13
1.6.4 位運(yùn)算13
1.6.5 其他運(yùn)算14
1.6.6 運(yùn)算符的優(yōu)先級(jí)與結(jié)合性15
1.6.7 類(lèi)型轉(zhuǎn)換15
1.6.8 表達(dá)式16
1.7 枚舉類(lèi)型17
1.8 流程控制17
1.8.1 if語(yǔ)句17
1.8.2 switch語(yǔ)句18
1.8.3 while語(yǔ)句20
1.8.4 do…while語(yǔ)句20
1.8.5 for語(yǔ)句20
1.8.6 流程轉(zhuǎn)移語(yǔ)句22
習(xí)題23
第2章 類(lèi)和對(duì)象25
2.1 面向?qū)ο蟮能浖_(kāi)發(fā)過(guò)程25
2.2 類(lèi)和對(duì)象的基本概念25
2.3 類(lèi)的定義26
2.3.1 定義類(lèi)26
2.3.2 屬性27
2.3.3 構(gòu)造方法28
2.3.4 方法28
2.4 對(duì)象的使用31
2.4.1 創(chuàng)建對(duì)象31
2.4.2 使用對(duì)象31
2.5 封裝33
2.5.1 封裝與信息隱藏33
2.5.2 Getter和Setter方法33
2.6 方法重載34
2.7 this關(guān)鍵字36
2.7.1 使用當(dāng)前對(duì)象36
2.7.2 調(diào)用構(gòu)造方法37
2.8 類(lèi)成員和實(shí)例成員38
2.8.1 類(lèi)屬性和實(shí)例屬性38
2.8.2 類(lèi)方法和實(shí)例方法38
2.8.3 類(lèi)屬性和實(shí)例屬性的初始化40
2.9 包和模塊41
2.9.1 包42
2.9.2 模塊43
2.10 嵌套類(lèi)44
2.10.1 靜態(tài)嵌套類(lèi)44
2.10.2 內(nèi)部類(lèi)45
2.10.3 局部類(lèi)47
習(xí)題49
第3章 繼承和多態(tài)50
3.1 類(lèi)的繼承50
3.1.1 繼承概念50
3.1.2 繼承實(shí)現(xiàn)50
3.1.3 方法覆蓋51
3.1.4 super關(guān)鍵字52
3.1.5 類(lèi)型轉(zhuǎn)換55
3.1.6 java.lang.Object類(lèi)57
3.1.7 final關(guān)鍵字61
3.2 訪問(wèn)控制62
3.2.1 私有訪問(wèn)權(quán)限63
3.2.2 包訪問(wèn)權(quán)限63
3.2.3 子類(lèi)訪問(wèn)權(quán)限64
3.2.4 公共訪問(wèn)權(quán)限65
3.3 抽象類(lèi)與接口65
3.3.1 抽象類(lèi)66
3.3.2 接口定義67
3.3.3 接口實(shí)現(xiàn)68
3.3.4 使用接口類(lèi)型69
3.4 多態(tài)70
3.4.1 繼承與多態(tài)71
3.4.2 接口與多態(tài)72
3.4.3 多態(tài)的優(yōu)點(diǎn)73
3.5 設(shè)計(jì)模式74
3.5.1 單例模式74
3.5.2 策略模式75
習(xí)題77
第4章 數(shù)組與字符串79
4.1 數(shù)組79
4.1.1 創(chuàng)建數(shù)組79
4.1.2 訪問(wèn)數(shù)組元素80
4.1.3 數(shù)組初始化81
4.1.4 數(shù)組參數(shù)與返回?cái)?shù)組82
4.2 數(shù)組的基本操作84
4.2.1 數(shù)組復(fù)制84
4.2.2 數(shù)組比較86
4.2.3 數(shù)組排序87
4.2.4 數(shù)組查找91
4.3 多維數(shù)組93
4.4 可變參數(shù)的方法95
4.5 字符串96
4.5.1 String96
4.5.2 StringBuffer 和 StringBuilder98
4.6 命令行參數(shù)99
習(xí)題100
第5章 泛型與集合框架101
5.1 泛型101
5.1.1 泛型類(lèi)型101
5.1.2 泛型方法104
5.1.3 有界類(lèi)型參數(shù)105
5.1.4 泛型類(lèi)型的繼承107
5.1.5 通配符108
5.1.6 類(lèi)型擦除112
5.2 集合框架簡(jiǎn)介115
5.2.1 集合接口115
5.2.2 集合實(shí)現(xiàn)117
5.2.3 集合算法117
5.3 集合實(shí)現(xiàn)118
5.3.1 ArrayList119
5.3.2 HashSet122
5.3.3 HashMap124
5.3.4 LinkedList126
5.4 集合算法128
5.4.1 數(shù)據(jù)操作129
5.4.2 排序129
5.4.3 查找130
習(xí)題132
第6章 異常處理機(jī)制133
6.1 異常133
6.1.1 異常分類(lèi)133
6.1.2 常用標(biāo)準(zhǔn)異常類(lèi)134
6.2 異常處理135
6.2.1 捕獲異常135
6.2.2 方法聲明拋出異常137
6.2.3 拋出異常138
6.2.4 異常鏈139
6.2.5 覆蓋拋出異常的方法140
6.3 自定義異常141
6.3.1 創(chuàng)建自定義異常類(lèi)142
6.3.2 使用自定義異常142
6.4 日志143
6.4.1 日志記錄器143
6.4.2 使用全局日志記錄器144
6.4.3 使用自定義日志記錄器145
6.4.4 Java主流日志工具146
6.5 斷言146
6.5.1 斷言編譯147
6.5.2 打開(kāi)與關(guān)閉斷言147
6.5.3 斷言應(yīng)用148
習(xí)題150
第7章 線程151
7.1 線程的概念151
7.2 線程的實(shí)現(xiàn)151
7.2.1 繼承Thread類(lèi)152
7.2.2 實(shí)現(xiàn)Runnable接口153
7.2.3 實(shí)現(xiàn)Callable接口155
7.2.4 使用Lambda表達(dá)式156
7.2.5 線程的生命周期157
7.3 線程的控制158
7.3.1 暫停線程執(zhí)行158
7.3.2 等待線程結(jié)束158
7.3.3 中斷線程執(zhí)行159
7.3.4 線程優(yōu)先級(jí)161
7.3.5 Daemon線程161
7.4 多線程同步162
7.4.1 原子操作162
7.4.2 原子變量163
7.4.3 基于對(duì)象鎖的線程同步164
7.4.4 wait()和notify()167
7.5 線程池170
7.5.1 Callable和Future170
7.5.2 Executor接口171
7.5.3 線程池171
7.6 死鎖問(wèn)題174
習(xí)題174
第8章 輸入/輸出176
8.1 流的概念176
8.1.1 輸入流和輸出流176
8.1.2 字節(jié)流和字符流176
8.1.3 節(jié)點(diǎn)流和處理流177
8.2 字節(jié)流177
8.2.1 InputStream類(lèi)178
8.2.2 OutputStream類(lèi)178
8.2.3 字節(jié)流應(yīng)用示例179
8.3 字符流181
8.3.1 Reader類(lèi)181
8.3.2 Writer類(lèi)182
8.3.3 字符流應(yīng)用示例182
8.4 命令行I/O183
8.4.1 標(biāo)準(zhǔn)流183
8.4.2 控制臺(tái)184
8.5 格式化I/O185
8.5.1 格式化輸入185
8.5.2 格式化輸出188
8.6 對(duì)象的序列化和反序列化189
8.7 隨機(jī)訪問(wèn)文件192
8.8 文件NIO195
8.8.1 Path接口195
8.8.2 文件和目錄198
8.8.3 文件和目錄操作200
8.8.4 文件讀寫(xiě)201
8.8.5 文件和目錄屬性203
8.8.6 目錄遍歷204
習(xí)題208
第9章 圖形用戶界面210
9.1 Swing概述210
9.2 Swing容器210
9.2.1 頂層容器JFrame211
9.2.2 頂層容器JDialog212
9.2.3 通用容器JPanel214
9.2.4 通用容器JScrollPane215
9.2.5 通用容器JSplitPane216
9.2.6 通用容器JToolBar218
9.3 Swing組件218
9.3.1 標(biāo)簽219
9.3.2 按鈕220
9.3.3 復(fù)選框221
9.3.4 單選按鈕221
9.3.5 列表框223
9.3.6 組合框224
9.3.7 文本輸入225
9.3.8 進(jìn)度條227
9.3.9 菜單228
9.4 布局管理器232
9.4.1 BorderLayout232
9.4.2 FlowLayout233
9.4.3 BoxLayout234
9.4.4 GridLayout235
9.4.5 CardLayout236
9.4.6 GridBagLayout238
9.5 事件處理241
9.5.1 事件處理機(jī)制241
9.5.2 事件適配器243
9.5.3 內(nèi)部監(jiān)聽(tīng)器245
9.5.4 匿名監(jiān)聽(tīng)器245
9.5.5 事件處理實(shí)例247
9.6 多媒體251
9.6.1 繪圖252
9.6.2 基本圖形252
9.6.3 顏色和字體253
9.6.4 圖像254
9.6.5 動(dòng)畫(huà)257
習(xí)題259
第10章 網(wǎng)絡(luò)通信260
10.1 網(wǎng)絡(luò)基本概念260
10.1.1 TCP協(xié)議260
10.1.2 UDP協(xié)議261
10.1.3 IP地址和端口261
10.2 Java網(wǎng)絡(luò)功能262
10.2.1 網(wǎng)絡(luò)接口層262
10.2.2 網(wǎng)絡(luò)層263
10.2.3 傳輸層265
10.2.4 應(yīng)用層266
10.3 基于TCP的網(wǎng)絡(luò)通信266
10.3.1 TCP服務(wù)器267
10.3.2 TCP客戶端268
10.3.3 處理多客戶請(qǐng)求271
10.4 基于UDP的網(wǎng)絡(luò)通信274
10.4.1 UDP服務(wù)器275
10.4.2 UDP客戶端276
10.4.3 多播通信278
10.5 使用URL282
10.5.1 創(chuàng)建URL對(duì)象283
10.5.2 解析URL284
10.5.3 讀取URL資源內(nèi)容284
10.5.4 使用URL連接285
10.5.5 與Servlet交互287
習(xí)題290
第11章 訪問(wèn)數(shù)據(jù)庫(kù)292
11.1 SQL語(yǔ)言292
11.1.1 關(guān)系數(shù)據(jù)庫(kù)簡(jiǎn)介292
11.1.2 SQL語(yǔ)言292
11.2 JDBC概述294
11.3 使用JDBC訪問(wèn)數(shù)據(jù)庫(kù)295
11.4 使用SQLite數(shù)據(jù)庫(kù)298
11.4.1 SQLite簡(jiǎn)介298
11.4.2 SQLite數(shù)據(jù)庫(kù)基本操作299
11.4.3 使用帶參數(shù)的SQL語(yǔ)句302
11.5 使用ResultSet更新數(shù)據(jù)庫(kù)304
習(xí)題306
第12章 使用第三方類(lèi)庫(kù)307
12.1 Maven構(gòu)建工具307
12.1.1 Maven倉(cāng)庫(kù)308
12.1.2 Maven項(xiàng)目結(jié)構(gòu)309
12.1.3 簡(jiǎn)單Maven項(xiàng)目實(shí)例309
12.2 常用的第三方類(lèi)庫(kù)313
12.3 使用JSON數(shù)據(jù)314
12.3.1 JSON基本語(yǔ)法314
12.3.2 JSON數(shù)據(jù)解析與生成314
12.4 使用統(tǒng)計(jì)圖318
12.5 處理Word文件324
習(xí)題328
參考文獻(xiàn)330