本書分別講解了基本數(shù)據(jù)類型、枚舉和數(shù)組、運算符、表達式和語句、類、對象和接口、面向?qū)ο蟮膸讉基本原則、重要的設(shè)計模式、常用實用類、Java Swing圖形用戶界面、對話框、Java輸入輸出流、泛型與集合框架、JDBC數(shù)據(jù)庫操作、Java多線程機制、Java網(wǎng)絡基礎(chǔ)以及Java Applet等內(nèi)容。
基礎(chǔ)與實戰(zhàn)。相關(guān)概念及知識點都輔以相應的實例,通俗易懂,便于理解掌握面向?qū)ο蟮木幊趟枷搿?br />
實用與流行。涵蓋了Java開發(fā)過程中重要的及流行的方法和技巧,講解細致,環(huán)環(huán)相扣。
教學與互動。文字敘述注重可讀性,知識組織注意合理性,提供輔助在線教學平臺。
本書精選Java核心內(nèi)容和重要的實用技術(shù),注重Java語言的面向?qū)ο筇匦,強調(diào)面向?qū)ο蟮某绦蛟O(shè)計思想,在實例上側(cè)重實用性和啟發(fā)性,在類、對象、繼承、接口等重要的基礎(chǔ)知識上側(cè)重編程思想,在實用類、輸入輸出流、Java 網(wǎng)絡技術(shù)、JDBC數(shù)據(jù)庫操作等實用技術(shù)方面?zhèn)戎貙嵱。通過本書的學習,讀者可以掌握Java面向?qū)ο缶幊痰乃枷牒蚃ava編程中的一些重要技術(shù)。
在第3版中,除了更新了JDK 1.8(也稱為JDK 8)的版本外,在內(nèi)容上做了適當?shù)恼{(diào)整,特別增加了每章的上機實踐內(nèi)容。對第14章做了比較大的調(diào)整,由原來的操作Access數(shù)據(jù)庫,更改為操作JDK新版本自帶的Derby數(shù)據(jù)庫。刪除了很少使用的第15章的內(nèi)容。
全書共分為14章。第1章主要介紹Java產(chǎn)生的背景和Java平臺,讀者可以了解到Java是怎樣做到“一次寫成,處處運行”的; 第2章講述Java程序的基本結(jié)構(gòu); 第3章講解簡單數(shù)據(jù)類型; 第4章主要介紹Java運算符和控制語句; 第5章、第6章和第7章是本書的重點內(nèi)容之一,講述類與對象、子類與繼承、接口與實現(xiàn)等內(nèi)容; 第8章講解內(nèi)部類和異常類,特別強調(diào)使用內(nèi)部類的原則以及學習自定義異常的重要性; 第9章講述常用的實用類,包括字符串、日期、正則表達式、模式匹配以及數(shù)學計算等實用類,特別講解怎樣使用Scanner類解析字符串; 第10章講解Java中的輸入輸出流技術(shù),特別介紹怎樣使用輸入輸出流來克隆對象、Java的文件鎖技術(shù)以及使用Scanner解析文件等重要內(nèi)容; 第11章是基于Java Swing的GUI圖形用戶界面設(shè)計,講解常用的組件和容器,特別詳細講解事件處理; 第12章講述Java多線程技術(shù),通過許多有啟發(fā)的例子來幫助讀者理解多線程編程; 第13章講解Java在網(wǎng)絡編程中的一些重要技術(shù),涉及URL、Socket、InetAddress、DatagramPacket等重要的類,特別講解Java遠程調(diào)用(RMI); 第14章主要講解Java怎樣使用JDBC操作數(shù)據(jù)庫,講解了預處理、事務處理、批處理等重要技術(shù)。
本書實例的源程序以及電子教案可以從清華大學出版社網(wǎng)站上免費下載,以供讀者學習使用; 也可以加入耿祥義教材教學QQ群討論相關(guān)內(nèi)容。
編者
2017年6月
第1章Java入門
1.1Java的平臺無關(guān)性
1.1.1平臺與機器指令
1.1.2C/C++程序依賴平臺
1.1.3虛擬機與平臺
1.2Java之父——James Gosling
1.3Java的地位
1.3.1網(wǎng)絡地位
1.3.2語言地位
1.3.3需求地位
1.4安裝JDK
1.4.1平臺簡介
1.4.2安裝Java SE平臺
1.5Java程序的開發(fā)步驟
1.6一個簡單的Java應用程序
1.6.1編寫源文件
1.6.2編譯
1.6.3運行
1.7上機實踐
習題
第2章Java應用程序的基本結(jié)構(gòu)
2.1問題的提出
2.2簡單的Circle類
2.3使用Circle類創(chuàng)建對象
2.3.1用類聲明對象
2.3.2為對象分配變量
2.3.3使用對象
2.4在應用程序中使用對象
2.5Java應用程序的基本結(jié)構(gòu)
2.6在一個源文件中編寫多個類
2.7編程風格
2.7.1Allmans風格
2.7.2Kernighan風格
2.7.3注釋
2.8上機實踐
習題
第3章標識符與簡單數(shù)據(jù)類型
3.1標識符與關(guān)鍵字
3.1.1標識符
3.1.2關(guān)鍵字
3.2簡單數(shù)據(jù)類型
3.2.1邏輯類型
3.2.2整數(shù)類型
3.2.3字符類型
3.2.4浮點類型
3.3簡單數(shù)據(jù)類型的級別與類型轉(zhuǎn)換運算
3.4從命令行窗口輸入、輸出數(shù)據(jù)
3.4.1輸入基本型數(shù)據(jù)
3.4.2輸出基本型數(shù)據(jù)
3.5上機實踐
習題
第4章運算符、表達式與語句
4.1運算符與表達式
4.1.1算術(shù)運算符與算術(shù)表達式
4.1.2自增,自減運算符
4.1.3算術(shù)混合運算的精度
4.1.4關(guān)系運算符與關(guān)系表達式
4.1.5邏輯運算符與邏輯表達式
4.1.6賦值運算符與賦值表達式
4.1.7位運算符
4.1.8instanceof運算符
4.1.9運算符綜述
4.2語句概述
4.3if條件分支語句
4.3.1if語句
4.3.2ifelse語句
4.3.3ifelse ifelse語句
4.4switch開關(guān)語句
4.5循環(huán)語句
4.5.1for循環(huán)語句
4.5.2while循環(huán)
4.5.3dowhile循環(huán)
4.6break和continue語句
4.7數(shù)組
4.7.1聲明數(shù)組
4.7.2為數(shù)組分配元素
4.7.3數(shù)組元素的使用
4.7.4length的使用
4.7.5數(shù)組的初始化
4.7.6數(shù)組的引用
4.7.7遍歷數(shù)組
4.8上機實踐
習題
第5章類與對象
5.1面向?qū)ο蟮奶匦?br />
5.2類
5.2.1類聲明
5.2.2類體
5.2.3成員變量
5.2.4方法
5.2.5需要注意的問題
5.2.6類的UML類圖
5.3構(gòu)造方法與對象的創(chuàng)建
5.3.1構(gòu)造方法
5.3.2創(chuàng)建對象
5.3.3使用對象
5.3.4對象的引用和實體
5.4參數(shù)傳值
5.4.1傳值機制
5.4.2基本數(shù)據(jù)類型參數(shù)的傳值
5.4.3引用類型參數(shù)的傳值
5.5對象的組合
5.5.1由矩形和圓組合而成的圖形
5.5.2關(guān)聯(lián)關(guān)系和依賴關(guān)系的UML圖
5.6實例成員與類成員
5.6.1實例變量和類變量的聲明
5.6.2實例變量和類變量的區(qū)別
5.6.3實例方法和類方法的定義
5.6.4實例方法和類方法的區(qū)別
5.7方法重載與多態(tài)
5.8this關(guān)鍵字
5.8.1在構(gòu)造方法中使用this
5.8.2在實例方法中使用this
5.9包
5.9.1包語句
5.9.2有包名的類的存儲目錄
5.9.3運行有包名的主類
5.10import語句
5.10.1引入類庫中的類
5.10.2引入自定義包中的類
5.11訪問權(quán)限
5.11.1何謂訪問權(quán)限
5.11.2私有變量和私有方法
5.11.3共有變量和共有方法
5.11.4友好變量和友好方法
5.11.5受保護的成員變量和方法
5.11.6public類與友好類
5.12基本類型的類包裝
5.12.1Double和Float類
5.12.2Byte、Short 、Integer、Long類
5.12.3Character類
5.13可變參數(shù)
5.14上機實踐
習題
第6章子類與繼承
6.1子類與父類
6.2子類的繼承性
6.2.1子類和父類在同一包中的繼承性
6.2.2子類和父類不在同一包中的繼承性
6.2.3繼承關(guān)系(Generalization)的UML圖
6.3成員變量的隱藏和方法重寫
6.3.1成員變量的隱藏
6.3.2方法重寫(Override)
6.4super關(guān)鍵字
6.4.1用super操作被隱藏的成員變量和方法
6.4.2使用super調(diào)用父類的構(gòu)造方法
6.5final關(guān)鍵字
6.5.1final類
6.5.2final方法
6.5.3常量
6.6對象的上轉(zhuǎn)型對象
6.7繼承與多態(tài)
6.8abstract類和abstract方法
6.9面向抽象編程
6.10開閉原則
6.11上機實踐
習題
第7章接口與實現(xiàn)
7.1接口
7.2實現(xiàn)接口
7.3理解接口
7.4接口的UML圖
7.5接口回調(diào)
7.6接口與多態(tài)
7.7接口變量做參數(shù)
7.8abstract類與接口的比較
7.9面向接口編程
7.10上機實踐
習題
第8章內(nèi)部類與異常類
8.1內(nèi)部類
8.2匿名類
8.2.1和子類有關(guān)的匿名類
8.2.2和接口有關(guān)的匿名類
8.3異常類
8.3.1trycatch語句
8.3.2自定義異常類
8.3.3finally子語句
8.4斷言
8.5上機實踐
習題
第9章常用實用類
9.1String類
9.1.1構(gòu)造字符串對象
9.1.2String類的常用方法
9.1.3字符串與基本數(shù)據(jù)的相互轉(zhuǎn)化
9.1.4對象的字符串表示
9.1.5字符串與字符、字節(jié)數(shù)組
9.1.6正則表達式及字符串的替換與分解
9.2StringBuffer類
9.2.1StringBuffer對象的創(chuàng)建
9.2.2StringBuffer類的常用方法
9.3StringTokenizer類
9.4Date類
9.4.1構(gòu)造Date對象
9.4.2日期格式化
9.5Calendar類
9.6Math和BigInteger類
9.6.1Math類
9.6.2BigInteger類
9.7DecimalFormat類
9.7.1格式化數(shù)字
9.7.2將格式化字符串轉(zhuǎn)化為數(shù)字
9.8Pattern與Match類
9.8.1模式對象
9.8.2匹配對象
9.9Scanner類
9.10上機實踐
習題
第10章輸入輸出流
10.1File類
10.1.1文件的屬性
10.1.2目錄
10.1.3文件的創(chuàng)建與刪除
10.1.4運行可執(zhí)行文件
10.2字節(jié)流與字符流
10.2.1InputStream類與OutputStream類
10.2.2Reader類與Writer類
10.2.3關(guān)閉流
10.3文件字節(jié)流
10.3.1文件字節(jié)輸入流
10.3.2文件字節(jié)輸出流
10.4文件字符流
10.5緩沖流
10.6隨機流
10.7數(shù)組流
10.8數(shù)據(jù)流
10.9對象流
10.10序列化與對象克隆
10.11文件鎖
10.12使用Scanner解析文件
10.13上機實踐
習題
第11章組件及事件處理
11.1Java Swing概述
11.2窗口
11.2.1JFrame常用方法
11.2.2菜單條、菜單、菜單項
11.3常用組件與布局
11.3.1常用組件
11.3.2常用容器
11.3.3常用布局
11.3.4選項卡窗格
11.4處理事件
11.4.1事件處理模式
11.4.2ActionEvent事件
11.4.3ItemEvent事件
11.4.4DocumentEvent事件
11.4.5MouseEvent事件
11.4.6焦點事件
11.4.7鍵盤事件
11.4.8匿名類實例或窗口做監(jiān)視器
11.4.9事件總結(jié)
11.5使用MVC結(jié)構(gòu)
11.6對話框
11.6.1消息對話框
11.6.2輸入對話框
11.6.3確認對話框
11.6.4顏色對話框
11.6.5文件對話框
11.6.6自定義對話框
11.7發(fā)布GUI程序
11.8上機實踐
習題
第12章Java多線程機制
12.1進程與線程
12.1.1操作系統(tǒng)與進程
12.1.2進程與線程
12.2Java中的線程
12.2.1Java的多線程機制
12.2.2線程的狀態(tài)與生命周期
12.2.3線程調(diào)度與優(yōu)先級
12.3Thread類與線程的創(chuàng)建
12.3.1使用Thread的子類
12.3.2使用Thread類
12.3.3關(guān)于run方法啟動的次數(shù)
12.4線程的常用方法
12.5線程同步
12.6在同步方法中使用wait()、notify()和notifyAll()方法
12.7線程聯(lián)合
12.8上機實踐
習題
第13章Java網(wǎng)絡編程
13.1URL類
13.1.1URL的構(gòu)造方法
13.1.2讀取URL中的資源
13.2InetAddress類
13.2.1地址的表示
13.2.2獲取地址
13.3套接字
13.3.1套接字概述
13.3.2客戶端套接字
13.3.3ServerSocket對象與服務器端套接字
13.3.4使用多線程技術(shù)
13.4UDP數(shù)據(jù)報
13.4.1發(fā)送數(shù)據(jù)包
13.4.2接收數(shù)據(jù)包
13.5廣播數(shù)據(jù)報
13.6Java遠程調(diào)用(RMI)
13.6.1遠程對象及其代理
13.6.2RMI的設(shè)計細節(jié)
13.7上機實踐
習題
第5章
類 與 對 象
主要內(nèi)容
面向?qū)ο蟮奶匦裕?br />
類;
構(gòu)造方法與對象的創(chuàng)建;
參數(shù)傳值;
對象的組合;
實例成員與類成員;
方法重載與多態(tài);
this關(guān)鍵字;
包;
import語句;
訪問權(quán)限。
面向?qū)ο笳Z言有三個重要特性: 封裝、繼承和多態(tài)。學習面向?qū)ο缶幊桃莆赵鯓油ㄟ^抽象得到類,繼而學習怎樣編寫類的子類來體現(xiàn)繼承和多態(tài)。本章主要講述類和對象,即學習面向?qū)ο蟮牡谝粋特性: 封裝,下一章學習面向?qū)ο蟮牧硗鈨蓚特性: 繼承和多態(tài)。
5.1面向?qū)ο蟮奶匦?br />
隨著計算機硬件設(shè)備功能的進一步提高,使得基于對象的編程成為可能。基于對象的編程更加符合人的思維模式,編寫的程序更加健壯和強大,更重要的是,面向?qū)ο缶幊坦膭顒?chuàng)造性的程序設(shè)計。面向?qū)ο缶幊淌且环N先進的編程思想,更加容易解決復雜的問題,面向?qū)ο缶幊讨饕w現(xiàn)下面三個特性。
1. 封裝性
面向?qū)ο缶幊毯诵乃枷胫痪褪菍?shù)據(jù)和對數(shù)據(jù)的操作封裝在一起。通過抽象,即從具體的實例中抽取共同的性質(zhì)形成一般的概念,例如類的概念。
在實際生活中,我們每時每刻都與“對象”在打交道。我們用的鋼筆,騎的自行車,乘的公共汽車等。而我們經(jīng)常見到的卡車、公共汽車、轎車等都會涉及以下幾個重要的物理量,可乘載的人數(shù)、運行速度、發(fā)動機的功率、耗油量、自重、輪子數(shù)目等。另外,還有幾個重要的功能: 加速功能、減速功能、剎車、轉(zhuǎn)彎功能等。我們也可以把這些功能稱作是他們具有的方法,而物理量是它們的狀態(tài)描述,僅僅用物理量或功能不能很好地描述它們。在現(xiàn)實生活中,我們用這些共有的屬性和功能給出一個概念: 機動車類。也就是說,人們經(jīng)常談到的機動車類就是從具體的實例中抽取共同的屬性和功能形成的一個概念,那么一個具體的轎車就是機動車類的一個實例,即對象。一個對象將自己的數(shù)據(jù)和對這些數(shù)據(jù)的操作合理有效地封裝在一起,例如,每輛轎車調(diào)用“加大油門”改變的都是自己的運行速度。
2. 繼承性
繼承體現(xiàn)了一種先進的編程模式。子類可以繼承父類的屬性和功能,即繼承了父類具有的數(shù)據(jù)和數(shù)據(jù)上的操作,同時又可以增添子類獨有的數(shù)據(jù)和數(shù)據(jù)上的操作。例如,“人類”自然繼承了“哺乳類”的屬性和功能,同時又增添了人類獨有的屬性和功能。
3. 多態(tài)性
多態(tài)是面向?qū)ο缶幊痰挠忠恢匾卣鳌S袃煞N意義的多態(tài): 一種是操作名稱的多態(tài),即有多個操作具有相同的名字,但這些操作所接收的消息類型必須不同。例如,讓一個人執(zhí)行“求面積”操作時,他可能會問你求什么面積。所謂操作名稱的多態(tài)是指可以向操作傳遞不同消息,以便讓對象根據(jù)相應的消息來產(chǎn)生一定的行為。另一種多態(tài)是和繼承有關(guān)的多態(tài),是指同一個操作被不同類型對象調(diào)用時可能產(chǎn)生不同的行為。例如,狗和貓都具有哺乳類的功能: “喊叫”,當狗操作“喊叫”時產(chǎn)生的聲音是“汪汪… ”; 而當貓操作“喊叫”時產(chǎn)生的聲音是“喵喵…”。
5.2類
類是組成Java程序的基本要素,一個Java應用程序就是由若干個類構(gòu)成的(見第2章)。類是Java語言中最重要的“數(shù)據(jù)類型”,類聲明的變量被稱作對象,即類是用來創(chuàng)建對象的“模板”。
類的定義包括兩部分: 類聲明和類體;靖袷綖椋
class類名{
類體的內(nèi)容
}
class是關(guān)鍵字,用來定義類!癱lass 類名”是類的聲明部分,類名必須是合法的Java標識符。兩個大括號以及之間的內(nèi)容是類體。
5.2.1類聲明
以下是兩個類聲明的例子。
class People {
…
}
class植物{
…
}
“class People”和“class植物”叫作類聲明; “People”和“植物”分別是類名。類的名字要符合標識符規(guī)定,即名字可以由字母、下劃線、數(shù)字或美元符號組成,并且第一個字符不能是數(shù)字(這是語法要求的)。給類命名時,遵守下列編程風格(這不是語法要求的,但應當遵守)。
。1) 如果類名使用拉丁字母,那么名字的首字母使用大寫字母,如Hello,Time等。
(2) 類名最好容易識別、見名知意。當類名由幾個單詞復合而成時,每個單詞的首字母使用大寫,如ChinaMade,AmericanVehicle,HelloChina等。
5.2.2類體
寫類的目的是根據(jù)抽象描述一類事物共有的屬性和功能,即給出用于創(chuàng)建具體實例(對象)的一種數(shù)據(jù)類型,描述過程由類體實現(xiàn)。類聲明之后的一對大括號“{”,“}”以及它們之間的內(nèi)容稱作類體,大括號之間的內(nèi)容稱作類體的內(nèi)容。
抽象的關(guān)鍵是抓住事物的兩個方面: 屬性和功能,即數(shù)據(jù)以及在數(shù)據(jù)上進行的操作,因此類體的內(nèi)容由兩部分構(gòu)成。
變量的聲明: 用來描述數(shù)據(jù)(體現(xiàn)對象的屬性)。
方法: 方法可以對類中聲明的變量進行操作,即給出算法(體現(xiàn)對象具有的功能)。
下面是一個類名為Lader的類(用來描述梯形),類體內(nèi)容的變量定義部分定義了4個float類型變量: above、bottom、height和area; 方法定義部分定義了兩個方法: computerArea和setHeight。
……