本書結構新穎、概念清晰、面向應用,體現了作者提出的“程序設計=計算思維+語言藝術+工程方法”的教學思想。全書共分為4篇: 第1篇為面向對象啟步,用4個例子引導讀者逐步建立面向對象的思維方式和培養基本的設計能力,將Java基本語法貫穿其中;第2篇為面向抽象的結構優化,在介紹了抽象類和接口這兩個基本機制后,用一個故事引入了面向對象程序設計原則,接著用設計模式舉例加深對面向對象結構優化必要性的認識,為進一步學習設計模式打下基礎,最后介紹了反射技術;第3篇為基于API的開發,包括圖形用戶界面、網絡編程、JDBC、JavaBean、程序文檔化、程序配置和打包與發布;第4篇為Java高級技術,包括多線程技術、泛型編程和數據結構接口。通過這4篇可以達到夯實基礎、面向應用、領略全貌的教學效果,并適應不同層次的教學需求。
本書結構新穎、概念清晰、面向應用,滲透了作者提出的“以思路訓練為主線”的程序設計教育理念;書中例題豐富、習題題型多、覆蓋面寬,為讀者建立了一個全新概念的立體學習環境,并引導學生進行探索式學習。
張基溫,知名學者,計算機教育家。先后擔任名古屋大學訪問學者,山西財經大學、江南大學、華東政法大學、華南農業大學珠江學院、常熟理工學院、福建工程學院、廣西職業技術學院、晉城學院等多所大學的專職、客座或兼職教授,北京大學博雅方略城市發展與信息化研究中心研究員,南京大學出版社總編顧問,太原高新技術區IT研究院實驗室主任,山西省緊缺人才專家委員會副主任,中國信息經濟學會常務理事,全國高等院校計算機基礎教育研究會常務理事兼課程建設委員會副主任,中國計算機學會教育專業委員會委員,國家NIT考試委員會委員,江蘇省計算機基礎教學指導委員會委員,山西省新世紀專家學者協會副會長。為清華大學出版社、電子工業出版社、中國水利水電出版社、南京大學出版社、中國鐵道出版社等主編了信息管理與信息系統專業、計算機實驗與實踐、大學生信息素養等多個系列教材。研究和教學領域涉及計算機科學與技術、信息管理、信息經濟學、電子政務與電子商務、服務科學,發表論文一百余篇,已出版著作90余種。在程序設計教學領域,從20世紀80年代初就嘗試將軟件工程方法和算法思想引入程序設計課程,20世紀90年代開始倡導“從語法體系向問題體系轉變”、“程序設計與程序測試同步進行”、“重在邏輯思維和方法訓練、語法夠用就行”,并認為“不了解設計模式,就不會真正理解面向對象。”
新概念Java程序設計大學教程(第2版)
目錄第1篇面向對象程序設計啟步第1單元職員類3
1.1從現實世界中的對象到類模型3
1.1.1程序=模型+表現3
1.1.2現實世界中的對象分析4
1.1.3職員類的UML描述5
1.1.4職員類的Java語言描述5
1.1.5職員類的Java代碼說明6
1.2類的應用與測試8
1.2.1對象引用及其創建8
1.2.2構造器與this()9
1.2.3對象成員的訪問與this11
1.2.4主方法與主類12
1.2.5類文件與包14
1.3Java程序開發16
1.3.1Java編譯器與Java虛擬機16
1.3.2JDK16
1.3.3Eclipse開發環境18
1.4知識鏈接24
1.4.1Java語言及其特點24
1.4.2Java數據類型26
1.4.3字面值27
1.4.4基本類型的轉換29
1.4.5Java關鍵詞與標識符32
1.4.6流與標準I/O流對象33
1.4.7Java注釋34
習題135第2單元計算器類38
2.1計算器類的定義38
2.1.1計算器建模38
2.1.2Calculator類的Java描述39
2.2Calculator類的測試39
2.2.1測試數據設計39
2.2.2規避整除風險——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用選擇結構確定計算類型——Calculator類改進之三47
2.4.1用if…else實現calculate()方法47
2.4.2關系操作符49
2.4.3用switch結構實現calculate()方法50
2.5用靜態成員變量存儲中間結果——Calculator類改進之四52
2.5.1靜態成員變量的性質52
2.5.2帶有靜態成員變量的Calculator類定義52
2.6知識鏈接54
2.6.1Java表達式54
2.6.2靜態方法——類方法55
2.6.3初始化塊與靜態初始化塊57
2.6.4String類60
2.6.5正則表達式61
2.6.6Scanner類63
習題264第3單元素數序列產生器72
3.1問題描述與對象建模72
3.1.1素數序列產生器建模72
3.1.2getPrimeSequence()方法的基本思路72
3.2使用isPrime()判定素數的PrimeGenerator類的實現73
3.2.1采用while結構的getPrimeSequence()方法73
3.2.2采用do…while結構的getPrimeSequence()方法75
3.2.3采用for結構的getPrimeSequence()方法75
3.2.4重復結構中的continue語句76
3.2.5采用for結構的isPrime()方法76
3.2.6將isPrime()定義為靜態方法77
3.2.7不用isPrime()判定素數的PrimeGenerator類的實現78
3.3知識鏈接79
3.3.1變量的訪問屬性79
3.3.2變量的作用域79
3.3.3Java數據實體的生命期80
3.3.4基本類型的包裝81
習題383第4單元撲克游戲90
4.1數組與撲克牌的表示和存儲90
4.1.1數組的概念90
4.1.2數組的聲明與內存分配90
4.1.3數組的初始化92
4.1.4匿名數組93
4.2數組元素的訪問93
4.2.1用普通循環結構訪問數組元素94
4.2.2用增強for遍歷數組元素94
4.3洗牌95
4.3.1隨機數與Random類95
4.3.2洗牌方法設計96
4.3.3含有洗牌方法的撲克游戲類設計98
4.4撲克的發牌與二維數組99
4.4.1基本的發牌算法99
4.4.2用二維數組表示玩家手中的牌100
4.4.3使用二維數組的發牌方法102
4.4.4含有洗牌、發牌方法的撲克游戲類設計102
4.5知識鏈接104
4.5.1數組實用類Arrays104
4.5.2java.util.Vector類105
4.5.3命令行參數107
4.5.4Math類108
習題4109第2篇面向抽象的結構優化第5單元學生研究生115
5.1學生類研究生類層次結構115
5.1.1由Student類派生GradStudent類115
5.1.2super關鍵字 117
5.1.3final關鍵字119
5.2Java的訪問權限控制119
5.2.1類成員的訪問權限控制119
5.2.2類的訪問權限控制120
5.2.3private構造器120
5.3類層次中的類型轉換121
5.3.1類層次中的賦值兼容規則121
5.3.2里氏代換原則122
5.3.3類型轉換與類型測試122
5.4方法覆蓋與隱藏123
5.4.1派生類實例方法覆蓋基類中原型相同的實例方法123
5.4.2用@Override標注覆蓋124
5.4.3派生類靜態方法隱藏基類中原型相同的靜態方法126
5.4.4JVM的綁定機制127
5.5知識鏈接128
5.5.1Object類128
5.5.2@Deprecated與@SuppressWarnings131
5.5.3Java異常類和錯誤類體系135
習題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抽象類小結153
6.3接口153
6.3.1接口及其特點153
6.3.2接口的實現類154
6.3.3關于接口的進一步討論156
6.4知識鏈接157
6.4.1Java構件修飾符小結157
6.4.2對象克隆158
習題6160第7單元面向對象程序架構優化規則164
7.0引言164
7.1從可重用說起: 合成/聚合優先原則165
7.1.1繼承重用的特點166
7.1.2合成/聚合重用及其特點166
7.1.3合成/聚合優先原則167
7.2從可維護性說起: 開閉原則168
7.2.1軟件的可維護性和可擴展性168
7.2.2開閉原則169
7.3面向抽象編程170
7.3.1具體與抽象170
7.3.2依賴倒轉原則170
7.3.3面向接口原則170
7.3.4面向接口編程舉例171
7.4單一職責原則175
7.4.1對象的職責175
7.4.2單一職責原則的概念176
7.4.3接口隔離原則176
7.5不要和陌生人說話181
7.5.1狹義迪米特法則181
7.5.2廣義迪米特法則182
習題7183
第8單元設計模式186
8.1設計模式概述186
8.2設計模式舉例——訴訟代理問題186
8.2.1無律師的涉訟程序設計186
8.2.2請律師代理的涉訟程序設計187
8.2.3關于代理模式189
8.3設計模式舉例——商場營銷問題190
8.3.1不用策略模式的商場營銷解決方案190
8.3.2策略模式的定義192
8.3.3采用策略模式的商場營銷解決方案193
8.4設計模式舉例——圖形對象的創建問題197
8.4.1簡單工廠模式197
8.4.2工廠方法模式202
8.4.3策略模式與簡單工廠模式結合207
8.5知識鏈接209
8.5.1類文件與類加載209
8.5.2Class對象210
8.5.3反射API213
8.5.4使用反射的工廠模式215
8.5.5使用反射+配置文件的工廠模式216
習題8218第3篇基于API的應用開發第9單元圖形用戶界面開發223
9.1圖形用戶界面概述223
9.1.1組件與容器223
9.1.2布局管理器與坐標系225
9.1.3事件與事件監聽器227
9.1.4AWT、Swing、SWT和JFace228
9.1.5Swing程序設計的一般流程229
9.2Swing組件229
9.2.1Swing工具包229
9.2.2Swing組件體系與分類230
9.2.3Swing容器232
9.2.4Swing布局管理器235
9.3事件處理239
9.3.1事件及其分類239
9.3.2事件監聽接口240
9.3.3事件監聽適配器243
9.4嵌套類及其在事件處理中的應用246
9.4.1嵌套類及其分類246
9.4.2實名內部類246
9.4.3匿名內部類248
習題9250第10單元Java 網絡程序設計251
10.1IP地址與InetAddress類251
10.1.1IP協議與IP地址251
10.1.2InetAddress類251
10.2Java Socket概述253
10.2.1Socket的概念253
10.2.2客戶端/服務器工作模式253
10.3面向TCP的Java Socket程序設計254
10.3.1Socket類和ServerSocket類254
10.3.2TCP Socket通信過程255
10.3.3TCP Socket程序設計257
10.4面向UDP的Java程序設計260
10.4.1DatagramPacket類261
10.4.2DatagramSocket類261
10.4.3UDP Socket程序設計263
10.5網絡資源訪問266
10.5.1URI、URL和URN266
10.5.2URL類267
10.5.3URLConnection類268
10.6知識鏈接268
10.6.1字節流與字符流268
10.6.2緩沖流與轉換流273
10.6.3PrintWriter類275
習題10276第11單元JDBC278
11.1JDBC概述278
11.1.1JDBC的組成與工作過程278
11.1.2JDBC API及其對JDBC過程的支持278
11.2加載JDBC驅動280
11.2.1JDBC數據庫驅動程序的類型280
11.2.2JDBC驅動類名與JDBC驅動下載282
11.2.3DriverManager類282
11.2.4注冊Driver284
11.3連接數據源286
11.3.1數據源描述規則——JDBC URL286
11.3.2獲取Connection對象287
11.3.3連接過程中的異常處理290
11.3.4Connection接口的常用方法290
11.4創建SQL工作空間進行數據庫操作291
11.4.1SQL291
11.4.2創建SQL工作空間293
11.4.3用Statement實例封裝SQL語句293
11.5處理結果集295
11.5.1結果集游標管理295
11.5.2getXxx()方法295
11.5.3updateXxx()方法296
11.5.4關閉數據庫連接296
11.5.5JDBC數據庫查詢實例296
11.6PreparedStatement接口299
11.6.1用PreparedStatement實例封裝SQL語句的特點299
11.6.2PreparedStatement接口的主要方法299
11.6.3PreparedStatement對象操作SQL語句的步驟300
11.6.4Java日期數據303
11.7事務處理304
11.7.1事務的概念304
11.7.2Connection類中有關事務處理的方法304
11.7.3JDBC事務處理程序的基本結構305
11.8DAO模式307
11.8.1DAO概述307
11.8.2DAO模式的基本結構309
11.8.3DAO程序舉例312
習題11318第12單元JavaBean320
12.1JavaBean概述320
12.1.1軟件組件與JavaBean320
12.1.2JavaBean結構321
12.1.3JavaBean規范323
12.2開發JavaBean323
12.2.1JavaBean API323
12.2.2JavaBean開發工具324
習題12326第13單元程序文檔化、程序配置與程序發布328
13.1Javadoc328
13.1.1Javadoc及其結構328
13.1.2Javadoc標簽328
13.1.3Javadoc應用規范330
13.1.4Javadoc命令332
13.2自定義Annotation333
13.2.1Annotation的基本定義格式333
13.2.2向Annotation注入數據334
13.2.3通過反射提取Annotation中的數據335
13.2.4用Annotation+反射設計DAO基類336
13.3Java程序配置342
13.3.1程序配置與程序配置文件342
13.3.2.properties文件343
13.3.3XML配置文件345
13.3.4基于InputStream輸入流的配置文件的讀取346
13.3.5基于資源綁定的配置文件讀取353
13.4Java程序的打包與發布354
13.4.1Java程序的打包與JAR文件包354
13.4.2manifest文件354
13.4.3JAR命令357
13.4.4在Eclipse環境中創建可執行JAR包359
13.4.5在MyEclipse環境中創建可執行JAR包361
習題13361
第4篇Java高級技術第14單元Java泛型編程365
14.1泛型基礎365
14.1.1問題的提出365
14.1.2泛型方法367
14.1.3多泛型類368
14.2泛型語法擴展369
14.2.1泛型通配符369
14.2.2泛型設限370
14.2.3泛型嵌套370
14.3實例——利用泛型和反射機制抽象DAO371
習題14373第15單元Java多線程375
15.1Java多線程概述375
15.1.1進程與線程375
15.1.2Java線程的生命周期376
15.1.3Java多線程程序實例: 室友叫醒380
15.1.4線程調度與線程優先級384
15.1.5知識鏈接: JVM運行時數據區384
15.2java.lang.Thread類386
15.2.1Thread類的構造器386
15.2.2Thread類中的優先級別靜態常量387
15.2.3Thread類中影響線程狀態的方法387
15.2.4Thread類中的一般方法388
15.2.5Thread類從Object繼承的方法388
15.3多線程管理388
15.3.1多線程同步共享資源388
15.3.2線程死鎖問題390
15.3.3線程組390
習題15391第16單元Java數據結構和接口397
16.1數據的邏輯結構與物理結構397
16.1.1數據的邏輯結構397
16.1.2數據的物理結構398
16.1.3Java數據結構API400
16.2接口及其應用401
16.2.1Collection接口及其方法401
16.2.2List接口及其實現402
16.2.3Set接口及其實現404
16.3聚集的標準輸出406
16.3.1Iterator接口406
16.3.2foreach407
16.4Map接口類及其應用408
16.4.1Map接口的定義與方法408
16.4.2Map.Entry接口408
16.4.3HashMap類和TreeMap類409
習題16411附錄413
附錄A符號413
A.1Java主要操作符的優先級和結合性413
A.2Javadoc標簽413
附錄BJava運行時異常類和錯誤類414
B.1RuntimeException類414
B.2Error類415
附錄CJava常用工具包416參考文獻418