目錄
第1篇面向?qū)ο蟪绦蛟O(shè)計(jì)啟步
第1單元職員類3
1.1從現(xiàn)實(shí)世界中的對(duì)象到類模型3
1.1.1程序=模型 表現(xiàn)3
1.1.2現(xiàn)實(shí)世界中的對(duì)象分析4
1.1.3職員類的UML描述5
1.1.4職員類的Java語言描述5
1.1.5職員類的Java代碼說明6
1.2類的應(yīng)用與測(cè)試8
1.2.1對(duì)象引用及其創(chuàng)建8
1.2.2構(gòu)造器與this()9
1.2.3對(duì)象成員的訪問與this11
1.2.4主方法與主類12
1.2.5類文件與包14
1.3Java程序開發(fā)16
1.3.1Java編譯器與Java虛擬機(jī)16
1.3.2JDK16
1.3.3Eclipse開發(fā)環(huán)境18
1.4知識(shí)鏈接24
1.4.1Java語言及其特點(diǎn)24
1.4.2Java數(shù)據(jù)類型26
1.4.3字面值27
1.4.4基本類型的轉(zhuǎn)換29
1.4.5Java關(guān)鍵詞與標(biāo)識(shí)符32
1.4.6流與標(biāo)準(zhǔn)I/O流對(duì)象33
1.4.7Java注釋34
習(xí)題135
第2單元計(jì)算器類38
2.1計(jì)算器類的定義38
2.1.1計(jì)算器建模38
2.1.2Calculator類的Java描述39
2.2Calculator類的測(cè)試39
2.2.1測(cè)試數(shù)據(jù)設(shè)計(jì)39
2.2.2規(guī)避整除風(fēng)險(xiǎn)——Calculator類改進(jìn)之一40
2.3異常處理——Calculator類改進(jìn)之二42
2.3.1Java異常處理概述42
2.3.2Java異常處理的基本形式42
2.3.3用throws向上層拋出異常44
2.3.4用throw直接拋出異常45
2.3.5Java提供的主要異常類47
2.4用選擇結(jié)構(gòu)確定計(jì)算類型——Calculator類改進(jìn)之三47
2.4.1用if…else實(shí)現(xiàn)calculate()方法47
2.4.2關(guān)系操作符49
2.4.3用switch結(jié)構(gòu)實(shí)現(xiàn)calculate()方法50
2.5用靜態(tài)成員變量存儲(chǔ)中間結(jié)果——Calculator類改進(jìn)之四52
2.5.1靜態(tài)成員變量的性質(zhì)52
2.5.2帶有靜態(tài)成員變量的Calculator類定義52
2.6知識(shí)鏈接54
2.6.1Java表達(dá)式54
2.6.2靜態(tài)方法——類方法55
2.6.3初始化塊與靜態(tài)初始化塊57
2.6.4String類60
2.6.5正則表達(dá)式61
2.6.6Scanner類64
習(xí)題264
第3單元素?cái)?shù)序列產(chǎn)生器72
3.1問題描述與對(duì)象建模72
3.1.1素?cái)?shù)序列產(chǎn)生器建模72
3.1.2getPrimeSequence()方法的基本思路72
3.2使用isPrime()判定素?cái)?shù)的PrimeGenerator類的實(shí)現(xiàn)73
3.2.1采用while結(jié)構(gòu)的getPrimeSequence()方法73
3.2.2采用do…while結(jié)構(gòu)的getPrimeSequence()方法75
3.2.3采用for結(jié)構(gòu)的getPrimeSequence()方法75
3.2.4重復(fù)結(jié)構(gòu)中的continue語句76
3.2.5采用for結(jié)構(gòu)的isPrime()方法76
3.2.6將isPrime()定義為靜態(tài)方法77
3.2.7不用isPrime()判定素?cái)?shù)的PrimeGenerator類的實(shí)現(xiàn)78
3.3知識(shí)鏈接79
3.3.1變量的訪問屬性79
3.3.2變量的作用域79
3.3.3Java數(shù)據(jù)實(shí)體的生命期80
3.3.4基本類型的包裝81
習(xí)題383
第4單元撲克游戲90
4.1數(shù)組與撲克牌的表示和存儲(chǔ)90
4.1.1數(shù)組的概念90
4.1.2數(shù)組的聲明與內(nèi)存分配90
4.1.3數(shù)組的初始化92
4.1.4匿名數(shù)組93
4.2數(shù)組元素的訪問93
4.2.1用普通循環(huán)結(jié)構(gòu)訪問數(shù)組元素94
4.2.2用增強(qiáng)for遍歷數(shù)組元素94
4.3洗牌95
4.3.1隨機(jī)數(shù)與Random類95
4.3.2洗牌方法設(shè)計(jì)96
4.3.3含有洗牌方法的撲克游戲類設(shè)計(jì)98
4.4撲克的發(fā)牌與二維數(shù)組99
4.4.1基本的發(fā)牌算法99
4.4.2用二維數(shù)組表示玩家手中的牌100
4.4.3使用二維數(shù)組的發(fā)牌方法102
4.4.4含有洗牌、發(fā)牌方法的撲克游戲類設(shè)計(jì)102
4.5知識(shí)鏈接104
4.5.1數(shù)組實(shí)用類Arrays104
4.5.2java.util.Vector類105
4.5.3命令行參數(shù)107
4.5.4Math類108
習(xí)題4109
第2篇面向類的程序設(shè)計(jì)
第5單元類的繼承115
5.1學(xué)生類研究生類層次結(jié)構(gòu)115
5.1.1由Student類派生GradStudent類115
5.1.2super關(guān)鍵字 117
5.1.3final關(guān)鍵字119
5.2Java的訪問權(quán)限控制119
5.2.1類成員的訪問權(quán)限控制119
5.2.2類的訪問權(quán)限控制120
5.2.3private構(gòu)造器120
5.3類層次中的類型轉(zhuǎn)換121
5.3.1類層次中的賦值兼容規(guī)則121
5.3.2里氏代換原則122
5.3.3類型轉(zhuǎn)換與類型測(cè)試122
5.4方法覆蓋與隱藏123
5.4.1派生類實(shí)例方法覆蓋基類中簽名相同的實(shí)例方法123
5.4.2用@Override標(biāo)注覆蓋124
5.4.3派生類靜態(tài)方法隱藏基類中簽名相同的靜態(tài)方法126
5.4.4JVM的綁定機(jī)制127
5.5知識(shí)鏈接128
5.5.1Object類128
5.5.2@Deprecated與@SuppressWarnings131
5.5.3Java異常類和錯(cuò)誤類體系135
習(xí)題5137
第6單元抽象類與接口145
6.1圓、三角形和矩形145
6.1.13個(gè)獨(dú)立的類: Circle、Rectangle和Triangle145
6.1.2枚舉147
6.2抽象類148
6.2.1由具體類抽象出抽象類148
6.2.2由抽象類派生出實(shí)例類150
6.2.3抽象類小結(jié)153
6.3接口153
6.3.1接口及其特點(diǎn)153
6.3.2接口的實(shí)現(xiàn)類154
6.3.3關(guān)于接口的進(jìn)一步討論156
6.4知識(shí)鏈接157
6.4.1Java構(gòu)件修飾符小結(jié)157
6.4.2對(duì)象克隆158
習(xí)題6160
第7單元面向?qū)ο蟪绦蚣軜?gòu)優(yōu)化原則164
7.0引言164
7.1從可重用說起: 合成/聚合優(yōu)先原則165
7.1.1繼承重用的特點(diǎn)166
7.1.2合成/聚合重用及其特點(diǎn)166
7.1.3合成/聚合優(yōu)先原則167
7.2從可維護(hù)性說起: 開閉原則168
7.2.1軟件的可維護(hù)性和可擴(kuò)展性168
7.2.2開閉原則169
7.3面向抽象的原則170
7.3.1具體與抽象170
7.3.2依賴倒轉(zhuǎn)原則170
7.3.3面向接口原則170
7.3.4面向接口編程舉例171
7.4單一職責(zé)原則175
7.4.1對(duì)象的職責(zé)175
7.4.2單一職責(zé)原則的概念176
7.4.3接口分離原則176
7.5不要和陌生人說話181
7.5.1狹義迪米特法則181
7.5.2廣義迪米特法則182
習(xí)題7183
第8單元設(shè)計(jì)模式186
8.1設(shè)計(jì)模式概述186
8.2設(shè)計(jì)模式舉例——訴訟代理問題186
8.2.1無律師的涉訟程序設(shè)計(jì)186
8.2.2請(qǐng)律師代理的涉訟程序設(shè)計(jì)187
8.2.3關(guān)于代理模式189
8.3設(shè)計(jì)模式舉例——商場(chǎng)營(yíng)銷問題190
8.3.1不用策略模式的商場(chǎng)營(yíng)銷解決方案190
8.3.2策略模式的定義192
8.3.3采用策略模式的商場(chǎng)營(yíng)銷解決方案193
8.4設(shè)計(jì)模式舉例——圖形對(duì)象的創(chuàng)建問題197
8.4.1簡(jiǎn)單工廠模式197
8.4.2工廠方法模式202
8.4.3策略模式與簡(jiǎn)單工廠模式結(jié)合207
8.5知識(shí)鏈接209
8.5.1類文件與類加載209
8.5.2Class對(duì)象209
8.5.3反射API213
8.5.4使用反射的工廠模式215
8.5.5使用反射 配置文件的工廠模式216
習(xí)題8218
第3篇基于API的應(yīng)用開發(fā)
第9單元Java 網(wǎng)絡(luò)程序設(shè)計(jì)223
9.1IP地址與InetAddress類223
9.1.1IP協(xié)議與IP地址223
9.1.2InetAddress類223
9.2Java Socket概述225
9.2.1Socket的概念225
9.2.2客戶端/服務(wù)器工作模式225
9.3面向TCP的Java Socket程序設(shè)計(jì)226
9.3.1Socket類和ServerSocket類226
9.3.2TCP Socket通信過程227
9.3.3TCP Socket程序設(shè)計(jì)229
9.4面向UDP的Java程序設(shè)計(jì)232
9.4.1DatagramPacket類233
9.4.2DatagramSocket類233
9.4.3UDP Socket程序設(shè)計(jì)235
9.5網(wǎng)絡(luò)資源訪問238
9.5.1URI、URL和URN238
9.5.2URL類239
9.5.3URLConnection類240
9.6知識(shí)鏈接240
9.6.1字節(jié)流與字符流240
9.6.2緩沖流與轉(zhuǎn)換流245
9.6.3PrintWriter類247
習(xí)題9248
第10單元JDBC250
10.1JDBC概述250
10.1.1JDBC的組成與工作過程250
10.1.2JDBC API及其對(duì)JDBC過程的支持250
10.2加載JDBC驅(qū)動(dòng)252
10.2.1JDBC數(shù)據(jù)庫驅(qū)動(dòng)程序的類型252
10.2.2JDBC驅(qū)動(dòng)類名與JDBC驅(qū)動(dòng)程序的下載254
10.2.3DriverManager類254
10.2.4注冊(cè)Driver256
10.3連接數(shù)據(jù)源258
10.3.1數(shù)據(jù)源描述規(guī)則——JDBC URL258
10.3.2獲取Connection對(duì)象259
10.3.3連接過程中的異常處理262
10.3.4Connection接口的常用方法262
10.4創(chuàng)建SQL工作空間進(jìn)行數(shù)據(jù)庫操作263
10.4.1SQL263
10.4.2創(chuàng)建SQL工作空間265
10.4.3用Statement實(shí)例封裝SQL語句265
10.5處理結(jié)果集267
10.5.1結(jié)果集游標(biāo)的管理267
10.5.2getXxx()方法267
10.5.3updateXxx()方法268
10.5.4關(guān)閉數(shù)據(jù)庫連接268
10.5.5JDBC數(shù)據(jù)庫查詢實(shí)例268
10.6PreparedStatement接口271
10.6.1用PreparedStatement實(shí)例封裝SQL語句的特點(diǎn)271
10.6.2PreparedStatement接口的主要方法271
10.6.3PreparedStatement對(duì)象操作SQL語句的步驟272
10.6.4Java日期數(shù)據(jù)275
10.7事務(wù)處理276
10.7.1事務(wù)的概念276
10.7.2Connection類中有關(guān)事務(wù)處理的方法276
10.7.3JDBC事務(wù)處理程序的基本結(jié)構(gòu)277
10.8DAO模式279
10.8.1DAO概述279
10.8.2DAO模式的基本結(jié)構(gòu)281
10.8.3DAO程序舉例284
習(xí)題10290
第11單元JavaBean292
11.1JavaBean概述292
11.1.1軟件組件與JavaBean292
11.1.2JavaBean結(jié)構(gòu)293
11.1.3JavaBean規(guī)范295
11.2開發(fā)JavaBean295
11.2.1JavaBean API295
11.2.2JavaBean開發(fā)工具296
習(xí)題11298
第12單元程序文檔化、程序配置與程序發(fā)布300
12.1Javadoc300
12.1.1Javadoc及其結(jié)構(gòu)300
12.1.2Javadoc標(biāo)簽300
12.1.3Javadoc應(yīng)用規(guī)范302
12.1.4Javadoc命令304
12.2自定義Annotation305
12.2.1Annotation的基本定義格式305
12.2.2向Annotation注入數(shù)據(jù)306
12.2.3通過反射提取Annotation中的數(shù)據(jù)307
12.2.4用Annotation 反射設(shè)計(jì)DAO基類308
12.3Java程序配置314
12.3.1程序配置與程序配置文件314
12.3.2.properties文件315
12.3.3XML配置文件317
12.3.4基于InputStream輸入流的配置文件的讀取318
12.3.5基于資源綁定的配置文件的讀取325
12.4Java程序的打包與發(fā)布326
12.4.1Java程序的打包與JAR文件包326
12.4.2manifest文件326
12.4.3JAR命令329
12.4.4在Eclipse環(huán)境中創(chuàng)建可執(zhí)行JAR包331
12.4.5在MyEclipse環(huán)境中創(chuàng)建可執(zhí)行JAR包333
習(xí)題12333
第4篇Java高級(jí)技術(shù)
第13單元Java泛型編程337
13.1泛型基礎(chǔ)337
13.1.1問題的提出337
13.1.2泛型方法339
13.1.3多泛型類340
13.2泛型語法擴(kuò)展341
13.2.1泛型通配符341
13.2.2泛型設(shè)限342
13.2.3泛型嵌套342
13.3實(shí)例——利用泛型和反射機(jī)制抽象DAO343
習(xí)題13345
第14單元Java多線程347
14.1Java多線程概述347
14.1.1進(jìn)程與線程347
14.1.2Java線程的生命周期348
14.1.3Java多線程程序?qū)嵗? 室友叫醒352
14.1.4線程調(diào)度與線程優(yōu)先級(jí)356
14.1.5知識(shí)鏈接: JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)356
14.2 java.lang.Thread類358
14.2.1Thread類的構(gòu)造器358
14.2.2Thread類中的優(yōu)先級(jí)別靜態(tài)常量359
14.2.3Thread類中影響線程狀態(tài)的方法359
14.2.4Thread類中的一般方法360
14.2.5Thread類從Object繼承的方法360
14.3多線程管理360
14.3.1多線程同步共享資源360
14.3.2線程死鎖問題362
14.3.3線程組362
習(xí)題14363
第15單元Java數(shù)據(jù)結(jié)構(gòu)和接口369
15.1數(shù)據(jù)的邏輯結(jié)構(gòu)與物理結(jié)構(gòu)369
15.1.1數(shù)據(jù)的邏輯結(jié)構(gòu)369
15.1.2數(shù)據(jù)的物理結(jié)構(gòu)370
15.1.3Java數(shù)據(jù)結(jié)構(gòu)API372
15.2接口及其應(yīng)用373
15.2.1Collection接口及其方法373
15.2.2List接口及其實(shí)現(xiàn)374
15.2.3Set接口及其實(shí)現(xiàn)376
15.3聚集的標(biāo)準(zhǔn)輸出378
15.3.1Iterator接口378
15.3.2foreach379
15.4Map接口類及其應(yīng)用380
15.4.1Map接口的定義與方法380
15.4.2Map.Entry接口380
15.4.3HashMap類和TreeMap類381
習(xí)題15383
附錄A符號(hào)385
A.1Java主要操作符的優(yōu)先級(jí)和結(jié)合性385
A.2Javadoc標(biāo)簽385
附錄BJava運(yùn)行時(shí)異常類和錯(cuò)誤類387
B.1RuntimeException類387
B.2Error類388
附錄CJava常用的工具包390
參考文獻(xiàn)391