目錄
第1篇面向?qū)ο蟪绦蛟O(shè)計啟步
第1單元職員類3
1.1從現(xiàn)實世界中的對象到類模型3
1.1.1程序=模型 表現(xiàn)3
1.1.2現(xiàn)實世界中的對象分析4
1.1.3職員類的UML描述5
1.1.4職員類的Java語言描述5
1.1.5職員類的Java代碼說明6
1.2類的應(yīng)用與測試8
1.2.1對象引用及其創(chuàng)建8
1.2.2構(gòu)造器與this()9
1.2.3對象成員的訪問與this11
1.2.4主方法與主類12
1.2.5類文件與包14
1.3Java程序開發(fā)16
1.3.1Java編譯器與Java虛擬機16
1.3.2JDK16
1.3.3Eclipse開發(fā)環(huán)境18
1.4知識鏈接24
1.4.1Java語言及其特點24
1.4.2Java數(shù)據(jù)類型26
1.4.3字面值27
1.4.4基本類型的轉(zhuǎn)換29
1.4.5Java關(guān)鍵詞與標(biāo)識符32
1.4.6流與標(biāo)準(zhǔn)I/O流對象33
1.4.7Java注釋34
習(xí)題135
第2單元計算器類38
2.1計算器類的定義38
2.1.1計算器建模38
2.1.2Calculator類的Java描述39
2.2Calculator類的測試39
2.2.1測試數(shù)據(jù)設(shè)計39
2.2.2規(guī)避整除風(fēng)險——Calculator類改進之一40
2.3異常處理——Calculator類改進之二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)確定計算類型——Calculator類改進之三47
2.4.1用if…else實現(xiàn)calculate()方法47
2.4.2關(guān)系操作符49
2.4.3用switch結(jié)構(gòu)實現(xiàn)calculate()方法50
2.5用靜態(tài)成員變量存儲中間結(jié)果——Calculator類改進之四52
2.5.1靜態(tài)成員變量的性質(zhì)52
2.5.2帶有靜態(tài)成員變量的Calculator類定義52
2.6知識鏈接54
2.6.1Java表達式54
2.6.2靜態(tài)方法——類方法55
2.6.3初始化塊與靜態(tài)初始化塊57
2.6.4String類60
2.6.5正則表達式61
2.6.6Scanner類64
習(xí)題264
第3單元素數(shù)序列產(chǎn)生器72
3.1問題描述與對象建模72
3.1.1素數(shù)序列產(chǎn)生器建模72
3.1.2getPrimeSequence()方法的基本思路72
3.2使用isPrime()判定素數(shù)的PrimeGenerator類的實現(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()判定素數(shù)的PrimeGenerator類的實現(xiàn)78
3.3知識鏈接79
3.3.1變量的訪問屬性79
3.3.2變量的作用域79
3.3.3Java數(shù)據(jù)實體的生命期80
3.3.4基本類型的包裝81
習(xí)題383
第4單元撲克游戲90
4.1數(shù)組與撲克牌的表示和存儲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用增強for遍歷數(shù)組元素94
4.3洗牌95
4.3.1隨機數(shù)與Random類95
4.3.2洗牌方法設(shè)計96
4.3.3含有洗牌方法的撲克游戲類設(shè)計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è)計102
4.5知識鏈接104
4.5.1數(shù)組實用類Arrays104
4.5.2java.util.Vector類105
4.5.3命令行參數(shù)107
4.5.4Math類108
習(xí)題4109
第2篇面向類的程序設(shè)計
第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)換與類型測試122
5.4方法覆蓋與隱藏123
5.4.1派生類實例方法覆蓋基類中簽名相同的實例方法123
5.4.2用@Override標(biāo)注覆蓋124
5.4.3派生類靜態(tài)方法隱藏基類中簽名相同的靜態(tài)方法126
5.4.4JVM的綁定機制127
5.5知識鏈接128
5.5.1Object類128
5.5.2@Deprecated與@SuppressWarnings131
5.5.3Java異常類和錯誤類體系135
習(xí)題5137
第6單元抽象類與接口145
6.1圓、三角形和矩形145
6.1.13個獨立的類: Circle、Rectangle和Triangle145
6.1.2枚舉147
6.2抽象類148
6.2.1由具體類抽象出抽象類148
6.2.2由抽象類派生出實例類150
6.2.3抽象類小結(jié)153
6.3接口153
6.3.1接口及其特點153
6.3.2接口的實現(xiàn)類154
6.3.3關(guān)于接口的進一步討論156
6.4知識鏈接157
6.4.1Java構(gòu)件修飾符小結(jié)157
6.4.2對象克隆158
習(xí)題6160
第7單元面向?qū)ο蟪绦蚣軜?gòu)優(yōu)化原則164
7.0引言164
7.1從可重用說起: 合成/聚合優(yōu)先原則165
7.1.1繼承重用的特點166
7.1.2合成/聚合重用及其特點166
7.1.3合成/聚合優(yōu)先原則167
7.2從可維護性說起: 開閉原則168
7.2.1軟件的可維護性和可擴展性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對象的職責(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è)計模式186
8.1設(shè)計模式概述186
8.2設(shè)計模式舉例——訴訟代理問題186
8.2.1無律師的涉訟程序設(shè)計186
8.2.2請律師代理的涉訟程序設(shè)計187
8.2.3關(guān)于代理模式189
8.3設(shè)計模式舉例——商場營銷問題190
8.3.1不用策略模式的商場營銷解決方案190
8.3.2策略模式的定義192
8.3.3采用策略模式的商場營銷解決方案193
8.4設(shè)計模式舉例——圖形對象的創(chuàng)建問題197
8.4.1簡單工廠模式197
8.4.2工廠方法模式202
8.4.3策略模式與簡單工廠模式結(jié)合207
8.5知識鏈接209
8.5.1類文件與類加載209
8.5.2Class對象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è)計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è)計226
9.3.1Socket類和ServerSocket類226
9.3.2TCP Socket通信過程227
9.3.3TCP Socket程序設(shè)計229
9.4面向UDP的Java程序設(shè)計232
9.4.1DatagramPacket類233
9.4.2DatagramSocket類233
9.4.3UDP Socket程序設(shè)計235
9.5網(wǎng)絡(luò)資源訪問238
9.5.1URI、URL和URN238
9.5.2URL類239
9.5.3URLConnection類240
9.6知識鏈接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及其對JDBC過程的支持250
10.2加載JDBC驅(qū)動252
10.2.1JDBC數(shù)據(jù)庫驅(qū)動程序的類型252
10.2.2JDBC驅(qū)動類名與JDBC驅(qū)動程序的下載254
10.2.3DriverManager類254
10.2.4注冊Driver256
10.3連接數(shù)據(jù)源258
10.3.1數(shù)據(jù)源描述規(guī)則——JDBC URL258
10.3.2獲取Connection對象259
10.3.3連接過程中的異常處理262
10.3.4Connection接口的常用方法262
10.4創(chuàng)建SQL工作空間進行數(shù)據(jù)庫操作263
10.4.1SQL263
10.4.2創(chuàng)建SQL工作空間265
10.4.3用Statement實例封裝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ù)庫查詢實例268
10.6PreparedStatement接口271
10.6.1用PreparedStatement實例封裝SQL語句的特點271
10.6.2PreparedStatement接口的主要方法271
10.6.3PreparedStatement對象操作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è)計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高級技術(shù)
第13單元Java泛型編程337
13.1泛型基礎(chǔ)337
13.1.1問題的提出337
13.1.2泛型方法339
13.1.3多泛型類340
13.2泛型語法擴展341
13.2.1泛型通配符341
13.2.2泛型設(shè)限342
13.2.3泛型嵌套342
13.3實例——利用泛型和反射機制抽象DAO343
習(xí)題13345
第14單元Java多線程347
14.1Java多線程概述347
14.1.1進程與線程347
14.1.2Java線程的生命周期348
14.1.3Java多線程程序?qū)嵗? 室友叫醒352
14.1.4線程調(diào)度與線程優(yōu)先級356
14.1.5知識鏈接: JVM運行時數(shù)據(jù)區(qū)356
14.2 java.lang.Thread類358
14.2.1Thread類的構(gòu)造器358
14.2.2Thread類中的優(yōu)先級別靜態(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接口及其實現(xiàn)374
15.2.3Set接口及其實現(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符號385
A.1Java主要操作符的優(yōu)先級和結(jié)合性385
A.2Javadoc標(biāo)簽385
附錄BJava運行時異常類和錯誤類387
B.1RuntimeException類387
B.2Error類388
附錄CJava常用的工具包390
參考文獻391