本書詳細(xì)介紹了Java程序設(shè)計(jì)的基本環(huán)境、概念、方法和應(yīng)用。內(nèi)容分為三個(gè)部分:部分介紹了Java語言基礎(chǔ),包括數(shù)據(jù)、控制結(jié)構(gòu)、數(shù)組、類、包、對(duì)象、接口等;第二部分介紹了Java深入知識(shí),包括參數(shù)傳遞、虛方法調(diào)用、異常處理、Lambda表達(dá)式、流式處理;第三部分是Java的應(yīng)用,包括工具類與算法、線程、文件、Swing圖形用戶界面,以及Java在網(wǎng)絡(luò)、多媒體、數(shù)據(jù)庫等方面的應(yīng)用。本書對(duì)Java8、Java11-Java17中的新內(nèi)容也進(jìn)行了介紹。
本書內(nèi)容充實(shí),層次清晰,用豐富的實(shí)例進(jìn)行講解,由淺入深地引導(dǎo)讀者學(xué)習(xí)和掌握相關(guān)知識(shí)點(diǎn)。
在程序設(shè)計(jì)的教學(xué)中,選擇一種適合的語言是十分重要的。比較多種程序設(shè)計(jì)語言,筆者認(rèn)為Java具有如下突出的優(yōu)點(diǎn)。
其一,Java是面向?qū)ο蟮恼Z言,與現(xiàn)代面向?qū)ο蟮脑O(shè)計(jì)與分析的軟件工程相一致,也是當(dāng)前的主流程序設(shè)計(jì)語言之一。
其二,簡單易學(xué)。其中的數(shù)據(jù)類型、數(shù)據(jù)運(yùn)算、程序控制結(jié)構(gòu)等基本概念對(duì)于任何語言都是一致的;而其語法比C 等語言更簡單,更容易掌握。
其三,Java語言本身就支持一些高級(jí)特性,如自動(dòng)垃圾回收、異常處理、多線程、并行計(jì)算等,這些特性使Java成為極優(yōu)秀的語言之一。
此外,Java具有廣泛的用途。Java具有跨平臺(tái)的特點(diǎn),在各種平臺(tái)上都有應(yīng)用,它還可以有效地進(jìn)行數(shù)據(jù)庫、多媒體及網(wǎng)絡(luò)的程序設(shè)計(jì)。不僅如此,Java還可以編寫桌面應(yīng)用、手機(jī)應(yīng)用及網(wǎng)絡(luò)應(yīng)用。
綜上所述,Java是特別適合于程序設(shè)計(jì)學(xué)習(xí)的基礎(chǔ)語言。
對(duì)于學(xué)習(xí)者而言,選擇一本好的教材至關(guān)重要。筆者基于多年程序設(shè)計(jì)語言的教學(xué)經(jīng)驗(yàn),結(jié)合個(gè)人的軟件開發(fā)實(shí)踐,力圖使本書突出以下特色。
(1)對(duì)Java語言的基礎(chǔ)知識(shí),包括數(shù)據(jù)類型、流程控制、類的封裝與繼承、多態(tài)、虛方法調(diào)用、傳值調(diào)用等進(jìn)行系統(tǒng)講解,讓學(xué)習(xí)者知其然,并知其所以然。
(2)對(duì)Java類庫中的基本類,包括Math、字符串、集合,進(jìn)行詳細(xì)講解,以利于學(xué)習(xí)者打下牢固的基礎(chǔ)。
(3)對(duì)Java中的基本應(yīng)用,包括I/O、文本界面、圖形界面等,精選大量典型而實(shí)用的例子,力圖使學(xué)習(xí)者觸類旁通、舉一反三。
(4)對(duì)一些高級(jí)應(yīng)用,如數(shù)據(jù)庫編程、網(wǎng)絡(luò)編程、多媒體編程、多線程、并行計(jì)算等內(nèi)容,介紹了其概念、原理,以利于學(xué)習(xí)者能了解Java的實(shí)際應(yīng)用及發(fā)展。
(5)在講解語言的同時(shí),介紹它所采用的面向?qū)ο蠹夹g(shù)的基礎(chǔ)理論、主要原則和思維方法,以及在編程中寫好代碼的一些技巧與經(jīng)驗(yàn)。
(6)在講解、舉例時(shí)充分考慮到各個(gè)層次的需要,力求語言簡潔,內(nèi)容循序漸進(jìn)。同時(shí),考慮到部分讀者的需要,本書提供了較多的習(xí)題。
本書在內(nèi)容安排上,大致可以分為三部分:部分介紹了Java語言基礎(chǔ),包括數(shù)據(jù)、控制結(jié)構(gòu)、數(shù)組、類、包、對(duì)象、接口等;第二部分介紹了Java深入知識(shí),包括參數(shù)傳遞、虛方法調(diào)用、異常處理、工具類與算法;第三部分是Java的應(yīng)用,包括線程、并行編程、流式文件、圖形用戶界面,以及Java在網(wǎng)絡(luò)、多媒體、數(shù)據(jù)庫等方面的應(yīng)用。
本書歷經(jīng)了第1版、第1版修訂本、第2版和本次的第3版,書中融合了多年的教學(xué)經(jīng)驗(yàn),同時(shí)也針對(duì)廣大讀者的反饋進(jìn)行了改進(jìn)。另外,本書對(duì)Java語言的新特性進(jìn)行了介紹,如Java 5中的泛型、增強(qiáng)的for語句、裝箱等,Java 7中增加的switch與字符串、自動(dòng)嘗試關(guān)閉資源、新字面常量、多重異常捕獲,Java 8中增加的Lambda表達(dá)式、流式處理、函數(shù)式接口等,同時(shí)也將Java 9以上版本增加的語法特性融入到各章的示例中。
本書第3版在保持第2版整體框架的同時(shí),在一些細(xì)節(jié)上進(jìn)行了較多的修改。
(1)增加了一些新的知識(shí):實(shí)用的線程工具類、NIO、異步、HttpClient、Record類型等。
(2)對(duì)涉及圖形用戶界面的程序,統(tǒng)一改成Swing實(shí)現(xiàn),而不再使用較老的AWT組件、Applet等技術(shù),也不再使用獨(dú)立于Java SE的Java FX界面。
(3)在文字?jǐn)⑹錾,使用更通行的名詞術(shù)語,例題的講解更詳細(xì),書中的代碼重新進(jìn)行了整理,使用更有意義的命名和更通行的代碼風(fēng)格。
(4)對(duì)新的工具(如IDEA、Eclipse、NetBeans等)進(jìn)行了介紹,對(duì)實(shí)踐中用得較多的技術(shù)(如JUnit、正則表達(dá)式、數(shù)據(jù)庫等)也進(jìn)行了更詳細(xì)的介紹。
相信第3版在全面性、先進(jìn)性、實(shí)用性方面比前幾個(gè)版本做得更好一些。
本書的內(nèi)容和組織方式適合作為高等學(xué)校各專業(yè)計(jì)算機(jī)程序設(shè)計(jì)課程的教材,或者作為計(jì)算機(jī)技術(shù)的培訓(xùn)教材,也可以作為Java認(rèn)證考試(OCP/JP,即原來的SCJP)用書。
作者在中國大學(xué)MOOC平臺(tái)上開設(shè)的慕課Java程序設(shè)計(jì)是國家精品在線開放課程,本書也可以作為慕課教材。慕課的網(wǎng)址是:https://www.icourse163.org/course/PKU-1001941004,可以掃描下面的二維碼參加課程。
讀者可以從作者的個(gè)人網(wǎng)站(http://www.dstang.com)下載與本書配套的源程序。如果需要電子教案也可直接與作者聯(lián)系(dstang2000@263.net)。
書中存在的缺點(diǎn)和不足,懇請(qǐng)讀者批評(píng)指正。
唐大仕2021年7月于北京大學(xué)
唐大仕,博士,北京大學(xué)信息科學(xué)技術(shù)學(xué)院教師,獲北京大學(xué)教學(xué)成果一等獎(jiǎng)。開設(shè)的慕課Java程序設(shè)計(jì)C#程序設(shè)計(jì)是國家精品在線開放課程,慕課動(dòng)態(tài)幾何畫板Geogebra教學(xué)應(yīng)用獲評(píng)為中國大學(xué)美慕課。出版的教材包括《C#程序設(shè)計(jì)教程》《Visual C .NET程序設(shè)計(jì)》《Visual Basic程序設(shè)計(jì)》《Python程序設(shè)計(jì)》《Java程序設(shè)計(jì)》
第1章Java語言與面向?qū)ο蟮某绦蛟O(shè)計(jì)
1.1Java語言簡介
1.1.1Java 語言的發(fā)展
1.1.2Java 三大平臺(tái)
1.1.3Java語言的特點(diǎn)
1.1.4Java和C、C 比較
1.2面向?qū)ο蟪绦蛟O(shè)計(jì)
1.2.1面向?qū)ο蟾攀?br />1.2.2對(duì)象、類與實(shí)體
1.2.3對(duì)象的狀態(tài)與行為
1.2.4對(duì)象的關(guān)系
1.2.5面向?qū)ο蟮能浖_發(fā)過程
習(xí)題
第2章簡單的Java程序
2.1簡單程序的書寫
2.1.1HelloWorld程序
2.1.2Java程序的基本構(gòu)成
2.2程序的編輯、編譯與運(yùn)行
2.2.1Java開發(fā)工具包JDK
2.2.2程序的編譯與運(yùn)行
2.2.3使用jar打包程序
2.3Java程序中的基本輸入與輸出
2.3.1字符界面的輸入與輸出
2.3.2圖形界面的輸入與輸出
2.4Java集成開發(fā)環(huán)境
2.4.1文本編輯工具
2.4.2集成開發(fā)工具
2.4.3建構(gòu)工具及代碼混淆
習(xí)題
第3章數(shù)據(jù)運(yùn)算、流程控制和數(shù)組
3.1數(shù)據(jù)類型、變量與常量
3.1.1數(shù)據(jù)類型
3.1.2標(biāo)識(shí)符
3.1.3常量
3.1.4變量
3.1.5程序的注釋
3.2運(yùn)算符與表達(dá)式
3.2.1算術(shù)運(yùn)算符
3.2.2關(guān)系運(yùn)算符
3.2.3邏輯運(yùn)算符
3.2.4位運(yùn)算符
3.2.5賦值與強(qiáng)制類型轉(zhuǎn)換
3.2.6條件運(yùn)算符
3.2.7表達(dá)式及運(yùn)算的優(yōu)先級(jí)、結(jié)合性
3.3流程控制語句
3.3.1結(jié)構(gòu)化程序設(shè)計(jì)的三種基本流程
3.3.2簡單語句
3.3.3分支語句
3.3.4循環(huán)語句
3.3.5跳轉(zhuǎn)語句
3.4數(shù)組
3.4.1一維數(shù)組
3.4.2多維數(shù)組
3.4.3數(shù)組與增強(qiáng)的for語句
3.4.4數(shù)組的復(fù)制
習(xí)題
第4章類、包和接口
4.1類、字段、方法
4.1.1定義類中的字段和方法
4.1.2構(gòu)造方法與對(duì)象的創(chuàng)建
4.1.3使用對(duì)象
4.1.4方法的重載
4.1.5this的使用
4.2類的繼承
4.2.1派生子類
4.2.2字段的繼承、隱藏與添加
4.2.3方法的繼承、覆蓋與添加
4.2.4super的使用
4.2.5父類對(duì)象與子類對(duì)象的轉(zhuǎn)換
4.3包
4.3.1package語句
4.3.2import語句
4.3.3編譯和運(yùn)行包中的類
4.3.4CLASSPATH變量
4.3.5模塊
4.4訪問控制符
4.4.1成員的訪問控制符
4.4.2類的訪問控制符
4.4.3setter與getter
4.4.4構(gòu)造方法的隱藏
4.5非訪問控制符
4.5.1static
4.5.2final
4.5.3abstract
4.5.4其他修飾符
4.5.5一個(gè)應(yīng)用模式單例模式
4.6接口
4.6.1接口的概念
4.6.2定義接口
4.6.3實(shí)現(xiàn)接口
4.6.4對(duì)接口的引用
4.6.5Java 8對(duì)接口的擴(kuò)展
4.7枚舉
4.7.1枚舉的基本用法
4.7.2枚舉的深入用法
習(xí)題
第5章深入理解Java語言
5.1變量及其傳遞
5.1.1基本類型變量與引用型變量
5.1.2字段變量與局部變量
5.1.3變量的傳遞
5.1.4變量的返回
5.1.5不定長參數(shù)變量
5.2多態(tài)與虛方法調(diào)用
5.2.1上溯造型
5.2.2虛方法調(diào)用
5.2.3動(dòng)態(tài)類型確定
5.3對(duì)象構(gòu)造與初始化
5.3.1調(diào)用本類或父類的構(gòu)造方法
5.3.2構(gòu)造方法的執(zhí)行過程
5.3.3構(gòu)造方法內(nèi)部調(diào)用的方法的多態(tài)性
5.3.4實(shí)例初始化與靜態(tài)初始化
5.4對(duì)象清除與垃圾回收
5.4.1對(duì)象的自動(dòng)清除
5.4.2System.gc()方法
5.4.3finalize()方法
5.5內(nèi)部類與匿名類
5.5.1內(nèi)部類
5.5.2方法中的局部類及匿名類
5.5.3匿名類
5.6Lambda表達(dá)式與函數(shù)式接口
5.6.1Lambda表達(dá)式的書寫與使用
5.6.2函數(shù)式接口
5.6.3高階函數(shù)
5.7注解與反射
5.7.1注解的定義與使用
5.7.2反射
習(xí)題
第6章異常處理
6.1異常處理
6.1.1異常的概念
6.1.2捕獲和處理異常
6.1.3應(yīng)用舉例
6.2創(chuàng)建用戶自定義異常類
6.2.1自定義異常類
6.2.2重拋異常及異常鏈接
6.3異常與資源管理
6.3.1使用finally
6.3.2使用try with resource
6.4斷言及程序的測試
6.4.1使用assert
6.4.2程序的測試及JUnit
習(xí)題
第7章工具類及常用算法
7.1Java語言基礎(chǔ)類
7.1.1Java API
7.1.2Object類
7.1.3基本數(shù)據(jù)類型的包裝類
7.1.4Math類
7.1.5System類
7.2字符串和日期
7.2.1String類
7.2.2StringBuilder類
7.2.3StringTokenizer類
7.2.4日期相關(guān)類
7.3集合類
7.3.1Collection API
7.3.2Set接口及HashSet、TreeSet類
7.3.3List接口及ArrayList,LinkedList類
7.3.4棧與隊(duì)列
7.3.5Map接口及HashMap,TreeMap類
7.4泛型及集合遍歷
7.4.1泛型
7.4.2裝箱與拆箱
7.4.3Iterator及Enumeration
7.4.4集合與增強(qiáng)的for語句
7.5排序與查找
7.5.1使用Arrays類
7.5.2使用Collections類
7.5.3編寫排序程序
7.6遍試、迭代、遞歸及回溯
7.6.1遍試
7.6.2迭代
7.6.3遞歸
7.6.4回溯
習(xí)題
第8章線程
8.1線程的創(chuàng)建與運(yùn)行
8.1.1Java中的線程
8.1.2創(chuàng)建線程對(duì)象
8.1.3多線程
8.1.4使用Timer類
8.1.5應(yīng)用舉例
8.2線程的控制與同步
8.2.1線程的狀態(tài)與生命周期
8.2.2對(duì)線程的基本控制
8.2.3synchronized關(guān)鍵字
8.2.4線程間的同步控制
8.3線程的實(shí)用工具類
8.3.1線程安全的集合
8.3.2原子變量
8.3.3讀寫鎖
8.3.4Executor與Future
8.3.5使用CountDownLatch
8.4流式操作及并行流
8.4.1使用流的基本方法
8.4.2流及操作的種類
習(xí)題
第9章流、文件及基于文本的應(yīng)用
9.1流式輸入與輸出
9.1.1字節(jié)流與字符流
9.1.2節(jié)點(diǎn)流和處理流
9.1.3標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出
9.1.4文本文件及二進(jìn)制文件應(yīng)用示例
9.1.5對(duì)象序列化
9.2文件及目錄
9.2.1文件與目錄管理
9.2.2使用NIO2文件系統(tǒng)API
9.2.3文件輸入與輸出流
9.2.4RandomAccessFile類
9.3基于文本的應(yīng)用
9.3.1Java Application命令行參數(shù)
9.3.2環(huán)境參數(shù)
9.3.3處理Deprecated的API
9.4正則表達(dá)式
9.4.1正則表達(dá)式的基本元素
9.4.2Pattern及Matcher
9.5XML處理
9.5.1XML的基本概念
9.5.2XML編程
習(xí)題
第10章圖形用戶界面
10.1界面組件
10.1.1圖形用戶界面概述
10.1.2界面組件分類
10.1.3Component的方法
10.2布局管理
10.2.1FlowLayout
10.2.2BorderLayout
10.2.3GridLayout
10.2.4通過嵌套來設(shè)定復(fù)雜的布局
10.2.5其他布局管理
10.3事件處理
10.3.1事件及事件監(jiān)聽器
10.3.2事件監(jiān)聽器的注冊(cè)
10.3.3事件適配器
10.3.4內(nèi)部類及匿名類在事件處理中的應(yīng)用
10.4常用組件的使用
10.4.1標(biāo)簽、按鈕與動(dòng)作事件
10.4.2文本框、文本區(qū)域與文本事件
10.4.3單選按鈕、復(fù)選按鈕,列表與選擇事件
10.4.4調(diào)整事件與滾動(dòng)條
10.4.5鼠標(biāo)、鍵盤事件
10.4.6JFrame與窗口事件
10.4.7JPanel與容器事件
10.4.8組件事件、焦點(diǎn)事件與對(duì)話框
10.5繪圖、圖像和動(dòng)畫
10.5.1繪制圖形
10.5.2顯示文字
10.5.3顯示圖像及實(shí)現(xiàn)動(dòng)畫
10.6基于GUI的應(yīng)用程序
10.6.1使用可視化設(shè)計(jì)工具
10.6.2菜單的定義與使用
10.6.3菜單、工具條及對(duì)話框的應(yīng)用
習(xí)題
第11章網(wǎng)絡(luò)、多媒體和數(shù)據(jù)庫編程
11.1Java網(wǎng)絡(luò)編程
11.1.1使用URL
11.1.2用Java實(shí)現(xiàn)底層網(wǎng)絡(luò)通信
11.1.3實(shí)現(xiàn)多線程服務(wù)器程序
11.1.4與Email服務(wù)器通信
11.1.5使用HttpClient
11.2多媒體編程
11.2.1Java圖像編程
11.2.2Java播放聲音
11.2.3Java Media API簡介
11.3Java數(shù)據(jù)庫編程
11.3.1Java訪問數(shù)據(jù)庫的基本步驟
11.3.2使用JTable顯示數(shù)據(jù)表
11.4Java EE及Java ME簡介
11.4.1Java EE簡介
11.4.2Java ME簡介
習(xí)題
附錄AJava語言各版本增加的重要特性
參考文獻(xiàn)