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