本書將Java語言作為大學(xué)生計算機(jī)程序設(shè)計的入門語言,其特色是內(nèi)容全面、深入淺出、立體配套。書中詳細(xì)介紹了Java語言以及面向?qū)ο蟮脑O(shè)計思想和編程方法、圖形用戶界面的編程方法、網(wǎng)絡(luò)和數(shù)據(jù)庫程序的編程方法、線程的使用、Java集合框架、Java工程化開發(fā)等實(shí)用技術(shù)。全書以面向?qū)ο蟮某绦蛟O(shè)計方法貫穿始終,基礎(chǔ)性和實(shí)用性并重。宗旨是不僅使讀者掌握J(rèn)ava語言,而且能夠?qū)ΜF(xiàn)實(shí)世界中較簡單的問題及其解決方法用計算機(jī)語言進(jìn)行描述。本書適合作為高等院校Java語言程序設(shè)計課程的教材或Java愛好者入門的自學(xué)教材。
全書以面向?qū)ο蟮某绦蛟O(shè)計方法貫穿始終,基礎(chǔ)理論和工程實(shí)踐并重。宗旨是:不僅要使讀者掌握J(rèn)ava語言,而且要能夠?qū)ΜF(xiàn)實(shí)世界中較簡單的問題及其解決方法用計算機(jī)語言進(jìn)行描述,要有基本的工程實(shí)踐能力。
一、 版次說明
本書第1版于2005年出版,第2版于2011年6月出版。本版是在第2版的基礎(chǔ)上,廣泛聽取了讀者和同行的建議,參考了的資料,并根據(jù)作者本人在授課過程中的經(jīng)驗(yàn)而形成的。
二、 本書的作者及編寫背景
這是一本面向廣大初學(xué)者的入門教材,是《C 語言程序設(shè)計》的姊妹篇。《C 語言程序設(shè)計》一書自1999年第1版出版以來,已經(jīng)出版了5版,在清華大學(xué)等300多所大學(xué)的不同專業(yè)中使用,取得了良好的教學(xué)效果。與《C 語言程序設(shè)計》一樣,本書同樣是基于作者多年來在清華大學(xué)講授Java語言程序設(shè)計的經(jīng)驗(yàn),以及作者本人的研究和開發(fā)經(jīng)驗(yàn)編寫的。
Java語言是應(yīng)用廣泛的面向?qū)ο蟮某绦蛟O(shè)計語言之一。面向?qū)ο蟮某绦蛟O(shè)計方法將數(shù)據(jù)及對數(shù)據(jù)的操作方法封裝在一起,作為一個相互依存、不可分離的整體對象。對同類型對象抽象出其共性,形成類。這樣,程序模塊間的關(guān)系簡單,程序模塊的獨(dú)立性、數(shù)據(jù)的安全性具有良好的保障,通過繼承與多態(tài)性,使程序具有很高的可重用性,使得軟件的開發(fā)和維護(hù)都更為方便。
面向?qū)ο蠓椒ǖ某霈F(xiàn),實(shí)際上是程序設(shè)計方法發(fā)展的一個返璞歸真過程。軟件開發(fā)從本質(zhì)上講,就是對軟件所要處理的問題域進(jìn)行正確的認(rèn)識,并把這種認(rèn)識正確地描述出來。面向?qū)ο蠓椒ㄋ鶑?qiáng)調(diào)的基本原則,就是直接面對客觀存在的事物進(jìn)行軟件開發(fā),將人們在日常生活中習(xí)慣的思維方式和表達(dá)方式應(yīng)用在軟件開發(fā)中,使軟件開發(fā)從過分專業(yè)化的方法、規(guī)則和技巧中回到客觀世界,回到人們通常的思維。由于面向?qū)ο蠓椒ǖ耐怀鰞?yōu)點(diǎn),目前它已經(jīng)成為開發(fā)大型軟件時所采用的主要方法。
除了面向?qū)ο笠酝,Java語言的另一個突出特點(diǎn)是與平臺無關(guān),可以實(shí)現(xiàn)一次編寫、各處運(yùn)行。因此,Java被廣泛用于網(wǎng)絡(luò)應(yīng)用程序開發(fā),以及各種電器設(shè)備的嵌入式系統(tǒng)。
從語法上看,Java語言與C 語言一樣,都是以C語言的語法為基礎(chǔ)。那么,學(xué)習(xí)Java語言是否應(yīng)該首先學(xué)習(xí)C語言呢?不是的,雖然Java語言借鑒了C語言的語法,但是Java本身是一個完整的程序設(shè)計語言,而且它與C語言的程序設(shè)計思想是完全不同的。因此,Java語言是可以作為程序設(shè)計的入門語言來學(xué)習(xí)的,這正是本書的定位。學(xué)習(xí)本書并不要求讀者有C語言基礎(chǔ),但是有一定基礎(chǔ)的讀者學(xué)習(xí)起來會感覺更容易。
三、 本書的特色
本書的特色是內(nèi)容全面、深入淺出、立體配套。
本書將Java語言作為大學(xué)生的計算機(jī)程序設(shè)計入門語言,不僅詳細(xì)介紹語言本身,而且介紹面向?qū)ο蟮脑O(shè)計思想和編程方法、圖形用戶界面的編程方法、網(wǎng)絡(luò)和數(shù)據(jù)庫程序的編程方法、線程的使用、Java集合框架等實(shí)用開發(fā)技術(shù)。全書以面向?qū)ο蟮某绦蛟O(shè)計方法貫穿始終,基礎(chǔ)性和實(shí)用性并重。宗旨是: 不僅使讀者掌握J(rèn)ava語言本身,而且要能夠?qū)ΜF(xiàn)實(shí)世界中較簡單的問題及其解決方法用計算機(jī)語言進(jìn)行描述,并掌握基本的工程開發(fā)技術(shù)。當(dāng)然,要達(dá)到能夠描述較復(fù)雜的問題域還需要學(xué)習(xí)面向?qū)ο蟮能浖こ陶n等其他課程。
針對初學(xué)者和自學(xué)讀者的特點(diǎn),本書力求做到深入淺出,將復(fù)雜的概念用簡潔淺顯的語言娓娓道來。讀者還可以通過配套的《Java語言程序設(shè)計(第3版)學(xué)生用書》,在實(shí)踐中達(dá)到對內(nèi)容的深入理解和熟練掌握。
為了方便教師備課,本書配有教師參考資料,包括電子教案(PPT文件)、教學(xué)要點(diǎn)、考試樣題等。
四、 內(nèi)容摘要
第1章Java語言基礎(chǔ)知識: 作為全書的開篇,本章首先介紹面向?qū)ο蟪绦蛟O(shè)計的基本概念和Java語言的特點(diǎn);通過幾個簡單而典型的例子使讀者對Java程序有個感性認(rèn)識;然后詳細(xì)介紹Java的基本數(shù)據(jù)類型和表達(dá)式;講解數(shù)組的概念、創(chuàng)建和引用;后介紹控制流程。
第2章類與對象的基本概念: 主要介紹類與對象的基本概念、類的聲明、對象的生成與銷毀、枚舉類型,后簡要介紹了注解。
第3章類的重用: 介紹與類的重用有關(guān)的內(nèi)容,包括類的繼承、Object類、final類與final方法、抽象類、泛型、類的組合,以及Java包的應(yīng)用。
第4章接口與多態(tài): 介紹Java的接口、多態(tài)的概念及實(shí)現(xiàn)方法。
第5章異常處理與輸入輸出流: 概要介紹了異常處理機(jī)制、基本的輸入輸出流類,重點(diǎn)介紹常用的文件讀寫方式。
第6章集合框架: 概要介紹Java的集合框架,并對常用的集合類進(jìn)行詳細(xì)介紹。
第7章圖形用戶界面: 介紹Swing的基礎(chǔ)和主要特點(diǎn)、使用方法,容器的層次結(jié)構(gòu),布局管理,以及如何在Java Application和Java Applet中引入圖形用戶界面。
第8章多線程編程: 介紹線程的概念,以及如何創(chuàng)建和使用線程等問題。
第9章JDBC編程: 首先介紹數(shù)據(jù)庫的基本概念,以及基本SQL語句的使用,然后介紹在Java程序中如何實(shí)現(xiàn)對數(shù)據(jù)庫的操作,后介紹Java 自帶數(shù)據(jù)庫Java DB的操作。
第10章Servlet程序設(shè)計: 首先對與網(wǎng)絡(luò)相關(guān)的概念進(jìn)行簡單講解,然后簡單介紹Java語言Servlet程序的開發(fā)方法。
第11章JSP程序設(shè)計: 介紹JSP的基本概念和語法、JSP與JavaBean的結(jié)合、標(biāo)簽庫的應(yīng)用,以及Web應(yīng)用程序的MVC架構(gòu)、Web服務(wù)相關(guān)內(nèi)容。
第12章Java工程化開發(fā)概述: 介紹Java工程化開發(fā)過程、開發(fā)環(huán)境和工具,帶領(lǐng)讀者通過案例學(xué)習(xí)如何運(yùn)用理論知識解決實(shí)際問題。
五、 使用指南及相關(guān)資源
作者本人使用本書授課時的講課學(xué)時數(shù)為32學(xué)時,實(shí)驗(yàn)學(xué)時數(shù)為32學(xué)時,課外上機(jī)學(xué)時數(shù)為32學(xué)時,課內(nèi)外共96學(xué)時,每學(xué)時45分鐘。
與本書配套的教材有: 《Java語言程序設(shè)計(第3版)學(xué)生用書》、電子版教師資源。
本書內(nèi)容是在第2版基礎(chǔ)上修訂的,在此感謝參與編寫第1版、第2版的作者馬素霞、王行言、杜彬、廖學(xué)良、劉兆宏、李超、李玉山、徐駿、許磊、張超、張新鈺、王朝卿,以及參與本書修訂工作的胡家威。
感謝讀者選擇使用本書,歡迎您對本書內(nèi)容提出意見和建議。作者的電子郵件地址是zhengli@mail.tsinghua.edu.cn,來信標(biāo)題請包含Java book。
本書的讀者可以登錄學(xué)堂在線(http://www.xuetangx.com/)學(xué)習(xí)作者講授的國家精品在線開放課程Java程序設(shè)計。
作者2021年1月 于清華大學(xué)
鄭莉,清華大學(xué)計算機(jī)科學(xué)與技術(shù)系教授;主講MOOCC 語言程序設(shè)計、Java程序設(shè)計;國家精品資源共享課負(fù)責(zé)人;全國高等學(xué)校計算機(jī)教育研究會副理事長;全國高等院校計算機(jī)基礎(chǔ)教育研究會副會長;全國信息技術(shù)標(biāo)準(zhǔn)化技術(shù)委員會教育技術(shù)分技術(shù)委員會秘書長。主要研究方向:計算機(jī)教育、教育信息化、軟件工程,主持和參加多項國家863、支撐計劃課題和教育部課題。
主編出版教材20余部,其中《C 語言程序設(shè)計》獲教育部自然科學(xué)獎和精品教材稱號!禖 語言程序設(shè)計》、《Java語言程序設(shè)計》(本MOOC配套教材)為十二五普通高等教育本科規(guī)劃教材
起草教育信息化相關(guān)國家標(biāo)準(zhǔn)5部、國際標(biāo)準(zhǔn)1部。
獲教學(xué)成果獎、北京市教學(xué)成果獎、教育部自然科學(xué)獎、教育部科技進(jìn)步獎、北京市科技進(jìn)步獎、電子學(xué)會科技進(jìn)步獎等9項、教育部、北京市獎勵。
第1章Java語言基礎(chǔ)知識1
1.1Java語言與面向?qū)ο蟪绦蛟O(shè)計簡介1
1.1.1面向?qū)ο蟮某绦蛟O(shè)計思想1
1.1.2Java語言發(fā)展簡史3
1.1.3Java語言的特點(diǎn)4
1.1.4Java程序運(yùn)行機(jī)制5
1.2Java程序概述5
1.2.1搭建Java程序開發(fā)環(huán)境5
1.2.2個Java程序: Hello Java6
1.3基本數(shù)據(jù)類型與表達(dá)式6
1.3.1變量與常量7
1.3.2基本數(shù)據(jù)類型8
1.3.3運(yùn)算符與表達(dá)式10
1.3.4類型轉(zhuǎn)換13
1.4數(shù)組14
1.4.1數(shù)組的聲明15
1.4.2數(shù)組的創(chuàng)建15
1.4.3數(shù)組元素的初始化16
1.4.4數(shù)組的引用16
1.4.5多維數(shù)組18
1.5控制流程20
1.5.1if選擇結(jié)構(gòu)21
1.5.2switch選擇結(jié)構(gòu)23
1.5.3for循環(huán)24
1.5.4while語句25
1.5.5dowhile語句26
1.5.6break語句26
1.5.7continue語句28
1.6本章小結(jié)30
習(xí)題30
第2章類與對象的基本概念32
2.1面向?qū)ο蟮某绦蛟O(shè)計方法概述32
2.1.1抽象32
2.1.2封裝33
2.1.3繼承33
2.1.4多態(tài)33
2.2類與對象34
2.2.1類的聲明35
2.2.2對象的聲明與引用36
2.2.3數(shù)據(jù)成員37
2.2.4方法成員42
2.2.5包的概念48
2.2.6類的訪問控制51
2.2.7類成員的訪問控制51
2.3對象初始化和回收54
2.3.1構(gòu)造方法54
2.3.2內(nèi)存回收技術(shù)57
2.4枚舉類型58
2.4.1枚舉類型的默認(rèn)方法59
2.4.2枚舉類型的自定義屬性和方法59
2.5應(yīng)用舉例60
2.5.1聲明BankAccount類60
2.5.2聲明toString方法62
2.5.3聲明存取款方法63
2.5.4格式化輸出字符串64
2.5.5使用靜態(tài)工廠方法生成實(shí)例64
2.5.6聲明類變量65
2.6注解67
2.6.1注解應(yīng)用舉例68
2.6.2自定義注解69
2.6.3元注解簡介70
2.6.4注解的處理71
2.7本章小結(jié)72
習(xí)題72
第3章類的重用74
3.1類的繼承74
3.1.1繼承的概念74
3.1.2繼承的語法75
3.1.3隱藏和覆蓋78
3.1.4有繼承時的構(gòu)造方法82
3.1.5應(yīng)用舉例83
3.2Object類84
3.2.1相等與同一85
3.2.2Object類中的equals方法86
3.2.3equals方法的覆蓋86
3.3final類與final方法88
3.3.1final類88
3.3.2final方法89
3.4抽象類91
3.4.1抽象類的聲明91
3.4.2抽象方法92
3.5泛型93
3.5.1泛型的概念93
3.5.2通配符泛型和有限制的泛型96
3.6類的組合98
3.6.1組合的語法98
3.6.2組合與繼承的比較99
3.6.3組合與繼承的結(jié)合100
3.7包的應(yīng)用102
3.7.1Java基礎(chǔ)類庫概述103
3.7.2自定義包113
3.7.3JAR文件114
3.8本章小結(jié)117
習(xí)題117
第4章接口與多態(tài)119
4.1接口119
4.1.1接口的作用及語法119
4.1.2實(shí)現(xiàn)接口121
4.1.3函數(shù)式接口與Lambda表達(dá)式124
4.1.4實(shí)現(xiàn)多個接口128
4.1.5接口的擴(kuò)展130
4.1.6接口的默認(rèn)方法與靜態(tài)方法131
4.1.7接口的私有方法134
4.2類型轉(zhuǎn)換135
4.2.1類型轉(zhuǎn)換的概念135
4.2.2類型轉(zhuǎn)換的應(yīng)用136
4.2.3方法的查找137
4.3多態(tài)的概念138
4.3.1多態(tài)的目的139
4.3.2綁定的概念140
4.4多態(tài)的應(yīng)用142
4.5構(gòu)造方法與多態(tài)145
4.5.1構(gòu)造方法的調(diào)用順序146
4.5.2構(gòu)造方法中的多態(tài)方法149
4.6本章小結(jié)151
習(xí)題151
第5章異常處理與輸入輸出流152
5.1異常處理機(jī)制簡介152
5.1.1異常處理概述152
5.1.2錯誤的分類153
5.2異常的處理155
5.2.1聲明拋出異常155
5.2.2捕獲異常156
5.2.3生成異常對象161
5.2.4自定義異常類161
5.3輸入輸出流163
5.3.1輸入輸出流的概念163
5.3.2預(yù)定義的I/O流類概述164
5.3.3I/O異常167
5.4文件讀寫169
5.4.1寫文本文件169
5.4.2讀文本文件171
5.4.3寫二進(jìn)制文件174
5.4.4讀二進(jìn)制文件177
5.4.5File類180
5.4.6處理壓縮文件181
5.4.7對象序列化186
5.4.8隨機(jī)文件讀寫188
5.5本章小結(jié)190
習(xí)題191
第6章集合框架192
6.1集合框架概述192
6.2集合框架中的主要接口192
6.3集合框架中的常用類196
6.3.1HashSet196
6.3.2Vector和ArrayList198
6.3.3LinkedList203
6.3.4HashTable和HashMap204
6.4集合的操作213
6.4.1集合的遍歷213
6.4.2使用Collections類生成常用集合215
6.4.3使用Collections類進(jìn)行集合操作216
6.4.4數(shù)組實(shí)用方法217
6.5流式API218
6.5.1流式API介紹218
6.5.2流的獲取218
6.5.3流的操作219
6.6本章小結(jié)222
習(xí)題223
第7章圖形用戶界面224
7.1繪圖224
7.1.1圖形環(huán)境和圖形對象224
7.1.2顏色和字體224
7.1.3使用Graphics類繪圖225
7.1.4使用Graphics2D類繪圖(Java2D API)228
7.2Swing基礎(chǔ)228
7.2.1JFC與Swing228
7.2.2Swing與AWT229
7.2.3在Application中應(yīng)用Swing230
7.3Swing的特點(diǎn)和概念231
7.3.1Swing的組件和容器層次231
7.3.2布局管理234
7.3.3事件處理247
7.4Swing組件252
7.4.1頂層容器252
7.4.2中間容器255
7.4.3原子組件262
7.5其他Swing特性275
7.5.1Action對象275
7.5.2邊框277
7.5.3設(shè)置外觀和感覺278
7.5.4應(yīng)用線程279
7.5.5定時器281
7.6桌面API282
7.7本章小結(jié)286
習(xí)題287
第8章多線程編程288
8.1多線程編程基礎(chǔ)288
8.1.1線程的概念288
8.1.2Thread類288
8.1.3Runnable接口292
8.1.4線程間的數(shù)據(jù)共享294
8.1.5多線程的同步控制297
8.1.6線程之間的通信303
8.1.7后臺線程305
8.2線程的生命周期307
8.2.1線程的幾種基本狀態(tài)307
8.2.2死鎖問題308
8.2.3控制線程的生命311
8.3線程的優(yōu)先級312
8.4常用接口與實(shí)現(xiàn)類315
8.4.1Executor接口316
8.4.2ExecutorService接口317
8.4.3ThreadPoolExecutor類319
8.4.4ScheduledThreadPoolExecutor類323
8.5本章小結(jié)324
習(xí)題324
第9章JDBC編程326
9.1數(shù)據(jù)庫基礎(chǔ)知識326
9.1.1數(shù)據(jù)庫技術(shù)的特點(diǎn)326
9.1.2數(shù)據(jù)模型327
9.1.3關(guān)系表中的主鍵與外鍵328
9.1.4建立一個實(shí)例數(shù)據(jù)庫329
9.1.5SQL簡介333
9.2通過JDBC訪問數(shù)據(jù)庫335
9.2.1設(shè)置環(huán)境337
9.2.2建立連接338
9.2.3對數(shù)據(jù)庫進(jìn)行操作339
9.2.4執(zhí)行帶參數(shù)的SQL語句349
9.3Java DB349
9.4本章小結(jié)352
習(xí)題352
第10章Servlet程序設(shè)計353
10.1Java網(wǎng)絡(luò)程序設(shè)計的基本概念353
10.1.1網(wǎng)絡(luò)協(xié)議353
10.1.2統(tǒng)一資源標(biāo)識符URI354
10.1.3基于套接字的有連接通信355
10.1.4數(shù)據(jù)報通信356
10.1.5Servlet358
10.2Servlet基礎(chǔ)358
10.2.1Servlet容器、Web服務(wù)器、應(yīng)用服務(wù)器358
10.2.2Tomcat的配置與使用360
10.2.3Web應(yīng)用程序362
10.2.4Servlet API363
10.2.5Servlet的基本結(jié)構(gòu)363
10.2.6Servlet編譯364
10.3Servlet的生命周期365
10.3.1初始化Servlet365
10.3.2銷毀Servlet366
10.4與客戶端交互366
10.4.1提取Servlet信息366
10.4.2提取服務(wù)器信息368
10.4.3提取客戶端信息368
10.4.4發(fā)送HTML信息371
10.5客戶端跟蹤372
10.5.1使用Cookie372
10.5.2使用Session375
10.6協(xié)作與通信377
10.7程序舉例379
10.8本章小結(jié)383
習(xí)題384
第11章JSP程序設(shè)計385
11.1JSP簡介385
11.1.1什么是JSP程序385
11.1.2JSP語法概述387
11.1.3JSP內(nèi)置對象391
11.1.4一個簡單的JSP程序394
11.2JSP與JavaBean398
11.2.1JavaBean簡介398
11.2.2在JSP程序中使用JavaBean399
11.3JSP標(biāo)簽庫403
11.3.1標(biāo)簽處理類403
11.3.2標(biāo)簽庫描述文件404
11.3.3在JSP程序中使用標(biāo)簽405
11.3.4自定義標(biāo)簽庫405
11.4JSP與Servlet408
11.4.1Web應(yīng)用程序的一般結(jié)構(gòu)408
11.4.2JSP與Servlet間的信息共享409
11.4.3JSP與Servlet間的控制傳遞411
11.4.4Web應(yīng)用程序舉例412
11.5Web服務(wù)419
11.5.1Web服務(wù)的開發(fā)419
11.5.2Web服務(wù)的使用421
11.6本章小結(jié)422
習(xí)題422
第12章Java工程化開發(fā)概述423
12.1項目需求423
12.2開發(fā)環(huán)境424
12.2.1使用Git進(jìn)行版本控制424
12.2.2使用Maven進(jìn)行項目構(gòu)建427
12.2.3使用IntelliJ IDEA進(jìn)行Java開發(fā)431
12.3項目開發(fā)框架433
12.4核心模塊的開發(fā)439
12.4.1模塊的功能設(shè)計439
12.4.2業(yè)務(wù)服務(wù)接口的開發(fā)439
12.4.3數(shù)據(jù)庫存取程序的開發(fā)441
12.4.4展現(xiàn)程序的開發(fā)448
12.5單元測試與集成測試449
12.5.1對Spring Boot應(yīng)用進(jìn)行單元測試450
12.5.2對Spring Boot應(yīng)用進(jìn)行集成測試453
12.6本章小結(jié)456
習(xí)題457