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