本書詳細介紹了Java程序設計的基本環(huán)境、概念、方法和應用。內(nèi)容分為三個部分:部分介紹了Java語言基礎,包括數(shù)據(jù)、控制結(jié)構(gòu)、數(shù)組、類、包、對象、接口等;第二部分介紹了Java深入知識,包括參數(shù)傳遞、虛方法調(diào)用、異常處理、Lambda表達式、流式處理;第三部分是Java的應用,包括工具類與算法、線程、文件、Swing圖形用戶界面,以及Java在網(wǎng)絡、多媒體、數(shù)據(jù)庫等方面的應用。本書對Java8、Java11-Java17中的新內(nèi)容也進行了介紹。
本書內(nèi)容充實,層次清晰,用豐富的實例進行講解,由淺入深地引導讀者學習和掌握相關(guān)知識點。
在程序設計的教學中,選擇一種適合的語言是十分重要的。比較多種程序設計語言,筆者認為Java具有如下突出的優(yōu)點。
其一,Java是面向?qū)ο蟮恼Z言,與現(xiàn)代面向?qū)ο蟮脑O計與分析的軟件工程相一致,也是當前的主流程序設計語言之一。
其二,簡單易學。其中的數(shù)據(jù)類型、數(shù)據(jù)運算、程序控制結(jié)構(gòu)等基本概念對于任何語言都是一致的;而其語法比C 等語言更簡單,更容易掌握。
其三,Java語言本身就支持一些高級特性,如自動垃圾回收、異常處理、多線程、并行計算等,這些特性使Java成為極優(yōu)秀的語言之一。
此外,Java具有廣泛的用途。Java具有跨平臺的特點,在各種平臺上都有應用,它還可以有效地進行數(shù)據(jù)庫、多媒體及網(wǎng)絡的程序設計。不僅如此,Java還可以編寫桌面應用、手機應用及網(wǎng)絡應用。
綜上所述,Java是特別適合于程序設計學習的基礎語言。
對于學習者而言,選擇一本好的教材至關(guān)重要。筆者基于多年程序設計語言的教學經(jīng)驗,結(jié)合個人的軟件開發(fā)實踐,力圖使本書突出以下特色。
(1)對Java語言的基礎知識,包括數(shù)據(jù)類型、流程控制、類的封裝與繼承、多態(tài)、虛方法調(diào)用、傳值調(diào)用等進行系統(tǒng)講解,讓學習者知其然,并知其所以然。
(2)對Java類庫中的基本類,包括Math、字符串、集合,進行詳細講解,以利于學習者打下牢固的基礎。
(3)對Java中的基本應用,包括I/O、文本界面、圖形界面等,精選大量典型而實用的例子,力圖使學習者觸類旁通、舉一反三。
(4)對一些高級應用,如數(shù)據(jù)庫編程、網(wǎng)絡編程、多媒體編程、多線程、并行計算等內(nèi)容,介紹了其概念、原理,以利于學習者能了解Java的實際應用及發(fā)展。
(5)在講解語言的同時,介紹它所采用的面向?qū)ο蠹夹g(shù)的基礎理論、主要原則和思維方法,以及在編程中寫好代碼的一些技巧與經(jīng)驗。
(6)在講解、舉例時充分考慮到各個層次的需要,力求語言簡潔,內(nèi)容循序漸進。同時,考慮到部分讀者的需要,本書提供了較多的習題。
本書在內(nèi)容安排上,大致可以分為三部分:部分介紹了Java語言基礎,包括數(shù)據(jù)、控制結(jié)構(gòu)、數(shù)組、類、包、對象、接口等;第二部分介紹了Java深入知識,包括參數(shù)傳遞、虛方法調(diào)用、異常處理、工具類與算法;第三部分是Java的應用,包括線程、并行編程、流式文件、圖形用戶界面,以及Java在網(wǎng)絡、多媒體、數(shù)據(jù)庫等方面的應用。
本書歷經(jīng)了第1版、第1版修訂本、第2版和本次的第3版,書中融合了多年的教學經(jīng)驗,同時也針對廣大讀者的反饋進行了改進。另外,本書對Java語言的新特性進行了介紹,如Java 5中的泛型、增強的for語句、裝箱等,Java 7中增加的switch與字符串、自動嘗試關(guān)閉資源、新字面常量、多重異常捕獲,Java 8中增加的Lambda表達式、流式處理、函數(shù)式接口等,同時也將Java 9以上版本增加的語法特性融入到各章的示例中。
本書第3版在保持第2版整體框架的同時,在一些細節(jié)上進行了較多的修改。
(1)增加了一些新的知識:實用的線程工具類、NIO、異步、HttpClient、Record類型等。
(2)對涉及圖形用戶界面的程序,統(tǒng)一改成Swing實現(xiàn),而不再使用較老的AWT組件、Applet等技術(shù),也不再使用獨立于Java SE的Java FX界面。
(3)在文字敘述上,使用更通行的名詞術(shù)語,例題的講解更詳細,書中的代碼重新進行了整理,使用更有意義的命名和更通行的代碼風格。
(4)對新的工具(如IDEA、Eclipse、NetBeans等)進行了介紹,對實踐中用得較多的技術(shù)(如JUnit、正則表達式、數(shù)據(jù)庫等)也進行了更詳細的介紹。
相信第3版在全面性、先進性、實用性方面比前幾個版本做得更好一些。
本書的內(nèi)容和組織方式適合作為高等學校各專業(yè)計算機程序設計課程的教材,或者作為計算機技術(shù)的培訓教材,也可以作為Java認證考試(OCP/JP,即原來的SCJP)用書。
作者在中國大學MOOC平臺上開設的慕課Java程序設計是國家精品在線開放課程,本書也可以作為慕課教材。慕課的網(wǎng)址是:https://www.icourse163.org/course/PKU-1001941004,可以掃描下面的二維碼參加課程。
讀者可以從作者的個人網(wǎng)站(http://www.dstang.com)下載與本書配套的源程序。如果需要電子教案也可直接與作者聯(lián)系(dstang2000@263.net)。
書中存在的缺點和不足,懇請讀者批評指正。
唐大仕2021年7月于北京大學
唐大仕,博士,北京大學信息科學技術(shù)學院教師,獲北京大學教學成果一等獎。開設的慕課Java程序設計C#程序設計是國家精品在線開放課程,慕課動態(tài)幾何畫板Geogebra教學應用獲評為中國大學美慕課。出版的教材包括《C#程序設計教程》《Visual C .NET程序設計》《Visual Basic程序設計》《Python程序設計》《Java程序設計》
第1章Java語言與面向?qū)ο蟮某绦蛟O計
1.1Java語言簡介
1.1.1Java 語言的發(fā)展
1.1.2Java 三大平臺
1.1.3Java語言的特點
1.1.4Java和C、C 比較
1.2面向?qū)ο蟪绦蛟O計
1.2.1面向?qū)ο蟾攀?br />1.2.2對象、類與實體
1.2.3對象的狀態(tài)與行為
1.2.4對象的關(guān)系
1.2.5面向?qū)ο蟮能浖_發(fā)過程
習題
第2章簡單的Java程序
2.1簡單程序的書寫
2.1.1HelloWorld程序
2.1.2Java程序的基本構(gòu)成
2.2程序的編輯、編譯與運行
2.2.1Java開發(fā)工具包JDK
2.2.2程序的編譯與運行
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)工具及代碼混淆
習題
第3章數(shù)據(jù)運算、流程控制和數(shù)組
3.1數(shù)據(jù)類型、變量與常量
3.1.1數(shù)據(jù)類型
3.1.2標識符
3.1.3常量
3.1.4變量
3.1.5程序的注釋
3.2運算符與表達式
3.2.1算術(shù)運算符
3.2.2關(guān)系運算符
3.2.3邏輯運算符
3.2.4位運算符
3.2.5賦值與強制類型轉(zhuǎn)換
3.2.6條件運算符
3.2.7表達式及運算的優(yōu)先級、結(jié)合性
3.3流程控制語句
3.3.1結(jié)構(gòu)化程序設計的三種基本流程
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ù)組與增強的for語句
3.4.4數(shù)組的復制
習題
第4章類、包和接口
4.1類、字段、方法
4.1.1定義類中的字段和方法
4.1.2構(gòu)造方法與對象的創(chuàng)建
4.1.3使用對象
4.1.4方法的重載
4.1.5this的使用
4.2類的繼承
4.2.1派生子類
4.2.2字段的繼承、隱藏與添加
4.2.3方法的繼承、覆蓋與添加
4.2.4super的使用
4.2.5父類對象與子類對象的轉(zhuǎn)換
4.3包
4.3.1package語句
4.3.2import語句
4.3.3編譯和運行包中的類
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一個應用模式單例模式
4.6接口
4.6.1接口的概念
4.6.2定義接口
4.6.3實現(xiàn)接口
4.6.4對接口的引用
4.6.5Java 8對接口的擴展
4.7枚舉
4.7.1枚舉的基本用法
4.7.2枚舉的深入用法
習題
第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動態(tài)類型確定
5.3對象構(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實例初始化與靜態(tài)初始化
5.4對象清除與垃圾回收
5.4.1對象的自動清除
5.4.2System.gc()方法
5.4.3finalize()方法
5.5內(nèi)部類與匿名類
5.5.1內(nèi)部類
5.5.2方法中的局部類及匿名類
5.5.3匿名類
5.6Lambda表達式與函數(shù)式接口
5.6.1Lambda表達式的書寫與使用
5.6.2函數(shù)式接口
5.6.3高階函數(shù)
5.7注解與反射
5.7.1注解的定義與使用
5.7.2反射
習題
第6章異常處理
6.1異常處理
6.1.1異常的概念
6.1.2捕獲和處理異常
6.1.3應用舉例
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
習題
第7章工具類及常用算法
7.1Java語言基礎類
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棧與隊列
7.3.5Map接口及HashMap,TreeMap類
7.4泛型及集合遍歷
7.4.1泛型
7.4.2裝箱與拆箱
7.4.3Iterator及Enumeration
7.4.4集合與增強的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回溯
習題
第8章線程
8.1線程的創(chuàng)建與運行
8.1.1Java中的線程
8.1.2創(chuàng)建線程對象
8.1.3多線程
8.1.4使用Timer類
8.1.5應用舉例
8.2線程的控制與同步
8.2.1線程的狀態(tài)與生命周期
8.2.2對線程的基本控制
8.2.3synchronized關(guān)鍵字
8.2.4線程間的同步控制
8.3線程的實用工具類
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流及操作的種類
習題
第9章流、文件及基于文本的應用
9.1流式輸入與輸出
9.1.1字節(jié)流與字符流
9.1.2節(jié)點流和處理流
9.1.3標準輸入和標準輸出
9.1.4文本文件及二進制文件應用示例
9.1.5對象序列化
9.2文件及目錄
9.2.1文件與目錄管理
9.2.2使用NIO2文件系統(tǒng)API
9.2.3文件輸入與輸出流
9.2.4RandomAccessFile類
9.3基于文本的應用
9.3.1Java Application命令行參數(shù)
9.3.2環(huán)境參數(shù)
9.3.3處理Deprecated的API
9.4正則表達式
9.4.1正則表達式的基本元素
9.4.2Pattern及Matcher
9.5XML處理
9.5.1XML的基本概念
9.5.2XML編程
習題
第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通過嵌套來設定復雜的布局
10.2.5其他布局管理
10.3事件處理
10.3.1事件及事件監(jiān)聽器
10.3.2事件監(jiān)聽器的注冊
10.3.3事件適配器
10.3.4內(nèi)部類及匿名類在事件處理中的應用
10.4常用組件的使用
10.4.1標簽、按鈕與動作事件
10.4.2文本框、文本區(qū)域與文本事件
10.4.3單選按鈕、復選按鈕,列表與選擇事件
10.4.4調(diào)整事件與滾動條
10.4.5鼠標、鍵盤事件
10.4.6JFrame與窗口事件
10.4.7JPanel與容器事件
10.4.8組件事件、焦點事件與對話框
10.5繪圖、圖像和動畫
10.5.1繪制圖形
10.5.2顯示文字
10.5.3顯示圖像及實現(xiàn)動畫
10.6基于GUI的應用程序
10.6.1使用可視化設計工具
10.6.2菜單的定義與使用
10.6.3菜單、工具條及對話框的應用
習題
第11章網(wǎng)絡、多媒體和數(shù)據(jù)庫編程
11.1Java網(wǎng)絡編程
11.1.1使用URL
11.1.2用Java實現(xiàn)底層網(wǎng)絡通信
11.1.3實現(xiàn)多線程服務器程序
11.1.4與Email服務器通信
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簡介
習題
附錄AJava語言各版本增加的重要特性
參考文獻