本書將Java語言作為大學生計算機程序設(shè)計的入門語言,其特色是內(nèi)容全面、深入淺出、立體配套。書中詳細介紹了Java語言以及面向?qū)ο蟮脑O(shè)計思想和編程方法、圖形用戶界面的編程方法、網(wǎng)絡(luò)和數(shù)據(jù)庫程序的編程方法、線程的使用、Java集合框架、Java工程化開發(fā)等實用技術(shù)。全書以面向?qū)ο蟮某绦蛟O(shè)計方法貫穿始終,基礎(chǔ)性和實用性并重。宗旨是不僅使讀者掌握Java語言,而且能夠?qū)ΜF(xiàn)實世界中較簡單的問題及其解決方法用計算機語言進行描述。本書適合作為高等院校Java語言程序設(shè)計課程的教材或Java愛好者入門的自學教材。
全書以面向?qū)ο蟮某绦蛟O(shè)計方法貫穿始終,基礎(chǔ)理論和工程實踐并重。宗旨是:不僅要使讀者掌握Java語言,而且要能夠?qū)ΜF(xiàn)實世界中較簡單的問題及其解決方法用計算機語言進行描述,要有基本的工程實踐能力。
一、 版次說明
本書第1版于2005年出版,第2版于2011年6月出版。本版是在第2版的基礎(chǔ)上,廣泛聽取了讀者和同行的建議,參考了的資料,并根據(jù)作者本人在授課過程中的經(jīng)驗而形成的。
二、 本書的作者及編寫背景
這是一本面向廣大初學者的入門教材,是《C 語言程序設(shè)計》的姊妹篇�!禖 語言程序設(shè)計》一書自1999年第1版出版以來,已經(jīng)出版了5版,在清華大學等300多所大學的不同專業(yè)中使用,取得了良好的教學效果。與《C 語言程序設(shè)計》一樣,本書同樣是基于作者多年來在清華大學講授Java語言程序設(shè)計的經(jīng)驗,以及作者本人的研究和開發(fā)經(jīng)驗編寫的。
Java語言是應(yīng)用廣泛的面向?qū)ο蟮某绦蛟O(shè)計語言之一。面向?qū)ο蟮某绦蛟O(shè)計方法將數(shù)據(jù)及對數(shù)據(jù)的操作方法封裝在一起,作為一個相互依存、不可分離的整體對象。對同類型對象抽象出其共性,形成類。這樣,程序模塊間的關(guān)系簡單,程序模塊的獨立性、數(shù)據(jù)的安全性具有良好的保障,通過繼承與多態(tài)性,使程序具有很高的可重用性,使得軟件的開發(fā)和維護都更為方便。
面向?qū)ο蠓椒ǖ某霈F(xiàn),實際上是程序設(shè)計方法發(fā)展的一個返璞歸真過程。軟件開發(fā)從本質(zhì)上講,就是對軟件所要處理的問題域進行正確的認識,并把這種認識正確地描述出來。面向?qū)ο蠓椒ㄋ鶑娬{(diào)的基本原則,就是直接面對客觀存在的事物進行軟件開發(fā),將人們在日常生活中習慣的思維方式和表達方式應(yīng)用在軟件開發(fā)中,使軟件開發(fā)從過分專業(yè)化的方法、規(guī)則和技巧中回到客觀世界,回到人們通常的思維。由于面向?qū)ο蠓椒ǖ耐怀鰞?yōu)點,目前它已經(jīng)成為開發(fā)大型軟件時所采用的主要方法。
除了面向?qū)ο笠酝�,Java語言的另一個突出特點是與平臺無關(guān),可以實現(xiàn)一次編寫、各處運行。因此,Java被廣泛用于網(wǎng)絡(luò)應(yīng)用程序開發(fā),以及各種電器設(shè)備的嵌入式系統(tǒng)。
從語法上看,Java語言與C 語言一樣,都是以C語言的語法為基礎(chǔ)。那么,學習Java語言是否應(yīng)該首先學習C語言呢?不是的,雖然Java語言借鑒了C語言的語法,但是Java本身是一個完整的程序設(shè)計語言,而且它與C語言的程序設(shè)計思想是完全不同的。因此,Java語言是可以作為程序設(shè)計的入門語言來學習的,這正是本書的定位。學習本書并不要求讀者有C語言基礎(chǔ),但是有一定基礎(chǔ)的讀者學習起來會感覺更容易。
三、 本書的特色
本書的特色是內(nèi)容全面、深入淺出、立體配套。
本書將Java語言作為大學生的計算機程序設(shè)計入門語言,不僅詳細介紹語言本身,而且介紹面向?qū)ο蟮脑O(shè)計思想和編程方法、圖形用戶界面的編程方法、網(wǎng)絡(luò)和數(shù)據(jù)庫程序的編程方法、線程的使用、Java集合框架等實用開發(fā)技術(shù)。全書以面向?qū)ο蟮某绦蛟O(shè)計方法貫穿始終,基礎(chǔ)性和實用性并重。宗旨是: 不僅使讀者掌握Java語言本身,而且要能夠?qū)ΜF(xiàn)實世界中較簡單的問題及其解決方法用計算機語言進行描述,并掌握基本的工程開發(fā)技術(shù)。當然,要達到能夠描述較復雜的問題域還需要學習面向?qū)ο蟮能浖こ陶n等其他課程。
針對初學者和自學讀者的特點,本書力求做到深入淺出,將復雜的概念用簡潔淺顯的語言娓娓道來。讀者還可以通過配套的《Java語言程序設(shè)計(第3版)學生用書》,在實踐中達到對內(nèi)容的深入理解和熟練掌握。
為了方便教師備課,本書配有教師參考資料,包括電子教案(PPT文件)、教學要點、考試樣題等。
四、 內(nèi)容摘要
第1章Java語言基礎(chǔ)知識: 作為全書的開篇,本章首先介紹面向?qū)ο蟪绦蛟O(shè)計的基本概念和Java語言的特點;通過幾個簡單而典型的例子使讀者對Java程序有個感性認識;然后詳細介紹Java的基本數(shù)據(jù)類型和表達式;講解數(shù)組的概念、創(chuàng)建和引用;后介紹控制流程。
第2章類與對象的基本概念: 主要介紹類與對象的基本概念、類的聲明、對象的生成與銷毀、枚舉類型,后簡要介紹了注解。
第3章類的重用: 介紹與類的重用有關(guān)的內(nèi)容,包括類的繼承、Object類、final類與final方法、抽象類、泛型、類的組合,以及Java包的應(yīng)用。
第4章接口與多態(tài): 介紹Java的接口、多態(tài)的概念及實現(xiàn)方法。
第5章異常處理與輸入輸出流: 概要介紹了異常處理機制、基本的輸入輸出流類,重點介紹常用的文件讀寫方式。
第6章集合框架: 概要介紹Java的集合框架,并對常用的集合類進行詳細介紹。
第7章圖形用戶界面: 介紹Swing的基礎(chǔ)和主要特點、使用方法,容器的層次結(jié)構(gòu),布局管理,以及如何在Java Application和Java Applet中引入圖形用戶界面。
第8章多線程編程: 介紹線程的概念,以及如何創(chuàng)建和使用線程等問題。
第9章JDBC編程: 首先介紹數(shù)據(jù)庫的基本概念,以及基本SQL語句的使用,然后介紹在Java程序中如何實現(xiàn)對數(shù)據(jù)庫的操作,后介紹Java 自帶數(shù)據(jù)庫Java DB的操作。
第10章Servlet程序設(shè)計: 首先對與網(wǎng)絡(luò)相關(guān)的概念進行簡單講解,然后簡單介紹Java語言Servlet程序的開發(fā)方法。
第11章JSP程序設(shè)計: 介紹JSP的基本概念和語法、JSP與JavaBean的結(jié)合、標簽庫的應(yīng)用,以及Web應(yīng)用程序的MVC架構(gòu)、Web服務(wù)相關(guān)內(nèi)容。
第12章Java工程化開發(fā)概述: 介紹Java工程化開發(fā)過程、開發(fā)環(huán)境和工具,帶領(lǐng)讀者通過案例學習如何運用理論知識解決實際問題。
五、 使用指南及相關(guān)資源
作者本人使用本書授課時的講課學時數(shù)為32學時,實驗學時數(shù)為32學時,課外上機學時數(shù)為32學時,課內(nèi)外共96學時,每學時45分鐘。
與本書配套的教材有: 《Java語言程序設(shè)計(第3版)學生用書》、電子版教師資源。
本書內(nèi)容是在第2版基礎(chǔ)上修訂的,在此感謝參與編寫第1版、第2版的作者馬素霞、王行言、杜彬、廖學良、劉兆宏、李超、李玉山、徐駿、許磊、張超、張新鈺、王朝卿,以及參與本書修訂工作的胡家威。
感謝讀者選擇使用本書,歡迎您對本書內(nèi)容提出意見和建議。作者的電子郵件地址是zhengli@mail.tsinghua.edu.cn,來信標題請包含Java book。
本書的讀者可以登錄學堂在線(http://www.xuetangx.com/)學習作者講授的國家精品在線開放課程Java程序設(shè)計。
作者2021年1月 于清華大學
鄭莉,清華大學計算機科學與技術(shù)系教授;主講MOOCC 語言程序設(shè)計、Java程序設(shè)計;國家精品資源共享課負責人;全國高等學校計算機教育研究會副理事長;全國高等院校計算機基礎(chǔ)教育研究會副會長;全國信息技術(shù)標準化技術(shù)委員會教育技術(shù)分技術(shù)委員會秘書長。主要研究方向:計算機教育、教育信息化、軟件工程,主持和參加多項國家863、支撐計劃課題和教育部課題。
主編出版教材20余部,其中《C 語言程序設(shè)計》獲教育部自然科學獎和精品教材稱號�!禖 語言程序設(shè)計》、《Java語言程序設(shè)計》(本MOOC配套教材)為十二五普通高等教育本科規(guī)劃教材
起草教育信息化相關(guān)國家標準5部、國際標準1部。
獲教學成果獎、北京市教學成果獎、教育部自然科學獎、教育部科技進步獎、北京市科技進步獎、電子學會科技進步獎等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語言的特點4
1.1.4Java程序運行機制5
1.2Java程序概述5
1.2.1搭建Java程序開發(fā)環(huán)境5
1.2.2個Java程序: Hello Java6
1.3基本數(shù)據(jù)類型與表達式6
1.3.1變量與常量7
1.3.2基本數(shù)據(jù)類型8
1.3.3運算符與表達式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
習題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枚舉類型的默認方法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)工廠方法生成實例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
習題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
習題117
第4章接口與多態(tài)119
4.1接口119
4.1.1接口的作用及語法119
4.1.2實現(xiàn)接口121
4.1.3函數(shù)式接口與Lambda表達式124
4.1.4實現(xiàn)多個接口128
4.1.5接口的擴展130
4.1.6接口的默認方法與靜態(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
習題151
第5章異常處理與輸入輸出流152
5.1異常處理機制簡介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預定義的I/O流類概述164
5.3.3I/O異常167
5.4文件讀寫169
5.4.1寫文本文件169
5.4.2讀文本文件171
5.4.3寫二進制文件174
5.4.4讀二進制文件177
5.4.5File類180
5.4.6處理壓縮文件181
5.4.7對象序列化186
5.4.8隨機文件讀寫188
5.5本章小結(jié)190
習題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類進行集合操作216
6.4.4數(shù)組實用方法217
6.5流式API218
6.5.1流式API介紹218
6.5.2流的獲取218
6.5.3流的操作219
6.6本章小結(jié)222
習題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的特點和概念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
習題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常用接口與實現(xiàn)類315
8.4.1Executor接口316
8.4.2ExecutorService接口317
8.4.3ThreadPoolExecutor類319
8.4.4ScheduledThreadPoolExecutor類323
8.5本章小結(jié)324
習題324
第9章JDBC編程326
9.1數(shù)據(jù)庫基礎(chǔ)知識326
9.1.1數(shù)據(jù)庫技術(shù)的特點326
9.1.2數(shù)據(jù)模型327
9.1.3關(guān)系表中的主鍵與外鍵328
9.1.4建立一個實例數(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ù)庫進行操作339
9.2.4執(zhí)行帶參數(shù)的SQL語句349
9.3Java DB349
9.4本章小結(jié)352
習題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)一資源標識符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
習題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標簽庫403
11.3.1標簽處理類403
11.3.2標簽庫描述文件404
11.3.3在JSP程序中使用標簽405
11.3.4自定義標簽庫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
習題422
第12章Java工程化開發(fā)概述423
12.1項目需求423
12.2開發(fā)環(huán)境424
12.2.1使用Git進行版本控制424
12.2.2使用Maven進行項目構(gòu)建427
12.2.3使用IntelliJ IDEA進行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)用進行單元測試450
12.5.2對Spring Boot應(yīng)用進行集成測試453
12.6本章小結(jié)456
習題457