內容簡介
本書是套用Java介紹計算機編程技巧的入門圖書。之所以選用這個流行語言,是出於幾個理由: ●Java是一個面向對象的語言。面向對象已經成為軟體開發領域的一種基本方法。在本教材中,我們將解釋什麼東西構成了語言的面向對象。
Java是一個相對簡單的面向對象語言,至少與其他一些面向對象語言(比如C++)相比是這樣。儘管C++更多複雜性的介紹超越了本書的範圍,但還是要指出,它存在一些讓剛剛開始學習的學生誤入歧途的缺陷。其中的很多陷阱都不會在Java中出現。
Java從其他流行語言中借用了許多特性,特別是從C和C++中。這些熟悉的特性也使得Java對那些語言的用戶產生了吸引力。
Java甚至讓初級程式設計師也能夠編寫出包含相當複雜用戶界面——按鈕、列表框、滾動條等——的程式。
編輯推薦
本書是由大學任教的教授結合自身實際教學經驗編寫的Java教材,讀者不需要具備編程背景。本書將重點放在軟體開發過程的講解,注重實用性和可操作性。每章後面的“圖形用戶界面(GUI)”設計示例,既加強了讀者對本章核心概念的理解,又培養了讀者的實際編程能力。本書著重介紹了Java語言及其類庫,以及大量編程技巧和算法設計實現,使讀者能夠通過本教材的學習具備用軟體解決實際問題的能力。本書豐富的內容,循序漸進、由淺入深的講解方式,很適合作為Java程式設計的教學用書。
目錄
第1章進入Java1
1.1計算機與程式1
1.2程式與模型1
1.3對象、類和訊息3
1.3.1對象3
1.3.2行為3
1.3.3信息3
1.3.4Java程式4
1.3.5類4
1.3.6預定義的對象和類4
1.4第一個對象PrintStream對象5
1.5傳送一個訊息到System.out
對象5
1.6一個Java程式7
1.7Java小插曲標識符、語句順序、格
式和注釋8
1.7.1Java規則8
1.7.2標識符8
1.7.3關鍵字8
1.7.4Java的語句順序9
1.7.5程式格式和注釋9
1.7.6注釋9
1.7.7包圍的注釋9
1.7.8行注釋10
1.8例行步驟10
1.8.1可訪問性10
1.8.2準備執行:翻譯11
1.8.3執行11
1.9時刻12
1.10本章小結13
1.11關鍵術語14
1.12複習題15
1.13練習題15
1.14GUI補充網頁、HTML和小
應用程式概述16
第2章傳送訊息和執行操作22
2.1簡介22
2.2使用PrintStream對象22
2.3Java小插曲引用、方法和訊息23
2.3.1方法的重載24
2.3.2訊息發出後24
2.3.3再論標識符24
2.4String 類24
2.5方法、參數以及返回值27
2.6引用變數27
2.7Java小插曲變數和賦值29
2.7.1變數29
2.7.2賦值30
2.7.3賦值語句不是等式30
2.7.4初始化31
2.7.5引用變數和對象31
2.7.6微妙而重要的一點:變數
的兩種角色32
2.7.7變數是獨立的32
2.7.8常量不是變數33
2.7.9語句33
2.7.10變化33
2.8命令式程式設計完成任務34
2.8.1整數類型和算術運算35
2.8.2基本的算術運算符36
2.8.3優先權37
2.8.4複合賦值運算符38
2.8.5自增/自減39
2.8.6操作的順序40
2.9使用String方法41
2.9.1空串44
2.9.2靈活且實用的對象47
2.10命令式程式設計簡單的條件47
2.10.1if語句48
2.10.2條件49
2.11本章小結51
2.12關鍵術語52
2.13複習題53
2.14練習題53
2.15GUI 補充內容圖形的繪製和
定位56
第3章套用對象和基本類型64
3.1簡介64
3.2創建對象64
3.2.1使用構造方法創建對象64
3.2.2引用變數的重要作用65
3.3Java小插曲對象的來源65
3.3.1重載的和默認的構造
方法65
3.3.2對象來自於何處65
3.3.3不可變對象66
3.3.4級聯66
3.3.5組合67
3.4命令式程式設計布爾類型68
3.4.1boolean值和變數68
3.4.2boolean表達式69
3.5對象的套用69
3.6日期和日曆70
3.7命令式程式設計其他的整數
類型72
3.7.1為什麼我們還要用int72
3.7.2混合類型算術運算72
3.7.3其他的整數類型:short
和byte73
3.8BigInteger73
3.9Java小插曲包和import語句75
3.10輸入簡介75
3.10.1檔案輸入概要:從磁碟到
程式76
3.10.2從位元組到字元:Unicode
的例子77
3.10.3從char到String:獲得文本
的行77
3.11檔案輸入過程77
3.11.1類File:獲取硬碟檔案
信息77
3.11.2類FileInputStream:從磁
盤檔案中讀取位元組79
3.11.3類InputStreamReader:將
byte轉化成char79
3.11.4類BufferedReader:從
char流到字元串80
3.11.5結果:為輸入打開一個
檔案80
3.12鍵盤輸入82
3.13檔案輸出84
3.14網路計算簡介85
3.14.1網路的概念85
3.14.2網路輸入86
3.15Java小插曲Java文檔88
3.15.1Java應用程式接口88
3.15.2API 文檔的內容88
3.15.3文檔頁的層次88
3.15.4尋找類String88
3.16本章小結90
3.17關鍵術語91
3.18複習題91
3.19練習題92
3.20GUI補充材料初識動畫94
第4章定義類98
4.1簡介98
4.2類的定義方法98
4.2.1使用Logger類101
4.2.2基本的類的定義102
4.3類的定義實例變數102
4.3.1使用Stopwatch類105
4.3.2使用實例變數106
4.4關於方法的更多內容返回值106
4.4.1使用Counter類108
4.4.2返回值與輸出:再談
Stopwatch109
4.4.3使用返回值110
4.5命令式編程尋找最小值110
4.6Java小插曲變數、聲明以及return
語句112
4.6.1聲明順序112
4.6.2return語句112
4.6.3變數及其生存期113
4.7關於方法的更多內容形式
參數114
4.7.1使用類Minimizer116
4.7.2使用參數117
4.8狀態和行為117
4.9類的定義綜合起來118
4.9.1標識方法118
4.9.2確定狀態119
4.9.3實現test()120
4.9.4實現其他方法121
4.9.5使用類TypingTutor123
4.9.6方法模式:get和set125
4.10Java小插曲聲明、訪問和
對象125
4.10.1形參125
4.10.2訪問控制:public 與
private125
4.10.3對象訪問自己的方法126
4.10.4對象及其生存期126
4.11本章小結127
4.12關鍵術語127
4.13複習題128
4.14練習題128
4.15GUI補充材料一個簡單的
動畫130
第5章高級類定義137
5.1定製新對象構造方法137
5.1.1TypingTutor類137
5.1.2定義重載構造方法139
5.2Java小插曲構造方法、初始化
以及重載143
5.2.1默認構造方法143
5.2.2構造方法和初始化143
5.2.3重載144
5.3示例:Name類144
5.3.1確定行為144
5.3.2接口145
5.3.3Name類的實現146
5.3.4完整的Name類149
5.3.5使用Name類150
5.3.6輸出對象:修改
Name類150
5.4提供類的行為152
5.5Java小插曲靜態方法155
5.5.1回顧我們的第一個程式155
5.5.2預定義的靜態方法156
5.5.3讀取基本類型值157
5.6跟蹤類範圍內的信息靜態
變數158
5.7定義常量:final160
5.8Java小插曲使用對象161
5.8.1“句點”符號161
5.8.2再談訪問控制162
5.8.3關鍵字this162
5.8.4將對象表示為一個字
符串163
5.8.5比較兩個對象164
5.9重溫輸入方法測試輸入的
結束167
5.9.1Null值167
5.9.2在read()方法中使
用null167
5.10本章小結168
5.11關鍵術語168
5.12複習題168
5.13練習題169
5.14GUI補充材料創建控制和
互動169
第6章方法核心:命令式程式設計176
6.1概述176
6.2一個進行米制轉換的類176
6.2.1模擬度量的數值176
6.2.2基本數據類型float和
double177
6.2.3實現convertFeetToMeters()
方法178
6.2.4方法printFeetToMeters
Table():疊代179
6.2.5使用for來實現一個計數
循環180
6.3Java小插曲float、double以及for
語句181
6.3.1float和double的顯示181
6.3.2float和double封裝類181
6.3.3float和double的字
面值182
6.3.4使用float和double182
6.3.5什麼時候使用float和
double182
6.3.6混合類型算術183
6.3.7for語句的執行183
6.4π值的逼近183
6.4.1模擬鏢靶185
6.4.2編寫方法main()185
6.4.3實現Toss類190
6.4.4使用MonteCarloPi類193
6.5嵌套和複合的條件語句193
6.5.1Car類193
6.5.2實現chooseWarranty():多
分支檢測194
6.5.3複合條件195
6.6Java小插曲邏輯運算符和條件
語句196
6.6.1邏輯運算符196
6.6.2嵌套的if和懸空
的else196
6.6.3條件語句格式之間的
關係197
6.6.4Switch語句198
6.7本章小結199
6.8關鍵術語200
6.9複習題200
6.10練習題200
6.11GUI補充材料關於互動的更多
內容202
第7章類設計207
7.1概述207
7.2類設計概述207
7.3重溫Counter類207
7.4自動取款機209
7.4.1問題的描述209
7.4.2一個示例209
7.4.3尋找首要對象210
7.4.4確定ATM類所需要的
行為210
7.4.5定義ATM類的接口210
7.4.6定義ATM類的實例
變數211
7.4.7實現ATM類的方法211
7.4.8確定Account類的行為和
定義接口212
7.4.9定義Account類實例
變數212
7.4.10實現Account類的
方法213
7.4.11確定並實現Account類
的“輔助”方法213
7.4.12完整地實現
Account類215
7.4.13使用這些類216
7.4.14討論217
7.5調度修理工人的例子218
7.5.1問題的描述218
7.5.2情景舉例218
7.5.3尋找首要對象218
7.5.4確定所求的行為動作--
類RepairPerson218
7.5.5定義類RepairPerson的
接口219
7.5.6定義類RepairPerson的實例
變數220
7.5.7實現類RepairPerson的
方法220
7.5.8確定類Location所需的行為
動作222
7.5.9定義類Location的
接口222
7.5.10定義類Location的實例
變數223
7.5.11實現類Location的
方法223
7.5.12使用這些類225
7.6本章小結226
7.7關鍵術語227
7.8複習題227
7.9練習題227
7.10GUI補充材料多個控制項:布局
以及事件處理228
第8章驗證對象的行為245
8.1概述245
8.2錯誤的分類246
8.2.1編譯時的語法和語義
錯誤246
8.2.2運行時錯誤248
8.2.3邏輯錯誤248
8.3Java小插曲Java的斷言機制249
8.4測試驅動249
8.5自動測試251
8.6測試什麼以及如何測試254
8.6.1一個好的、完整的測試應該
由什麼組成254
8.6.2所有的行為都必須被
測試254
8.6.3試著尋找邏輯測試順序255
8.6.4確保每條語句至少被執行
了一次255
8.6.5不同的測試中應該使用
什麼樣的值257
8.6.6尋找並測試特例257
8.6.7不要關心測試的效率257
8.7調試的方法258
8.7.1發現bug258
8.7.2搜尋錯誤259
8.8本章小結259
8.9關鍵術語260
8.10複習題260
8.11練習題261
8.12GUI補充材料分離顯示和
控制261
第9章多個對象的處理272
9.1簡介272
9.2處理多個對象272
9.3循環模式275
9.4循環在測試中的作用276
9.5電話簿277
9.5.1問題的描述277
9.5.2情景示例277
9.5.3確定主要對象278
9.5.4確定所需要的行為278
9.5.5定義接口278
9.5.6定義實例變數278
9.5.7方法的實現278
9.5.8確定Entry類希望的
行為280
9.5.9定義Entry類的接口280
9.5.10定義Entry類的實例
變數281
9.5.11實現Entry類的方法281
9.5.12使用Entry類的方法281
9.5.13討論281
9.5.14類開發過程的本質282
9.6保存多個值282
9.6.1再談TelephoneBook282
9.6.2相關對象的集合283
9.7Vector——一個簡單的集合類283
9.8使用for循環來遍歷Vector284
9.9再談TelephoneBook類287
9.9.1一個更好的實現方法287
9.9.2定義實例變數287
9.9.3實現方法287
9.9.4討論288
9.10Java小插曲基本類型與集
合:再談封裝類288
9.11一個例子——確定學生的相對
表現289
9.11.1問題的描述289
9.11.2確定主要對象290
9.11.3行為的確定290
9.11.4定義接口290
9.11.5定義實例變數291
9.11.6方法的實現291
9.11.7類的使用292
9.11.8討論293
9.12另一個Vector的套用293
9.12.1doExperiment()方法295
9.12.2doOutput()方法295
9.13Java小插曲Object的方法298
9.14數組介紹300
9.14.1聲明並創建數組301
9.14.2數組元素302
9.15Vector和數組302
·ⅩⅧ·9.15.1使用數組還是
Vector302
9.15.2從Vector到數組303
9.16使用數組來處理拋擲硬幣304
9.17本章小結305
9.18關鍵術語305
9.19複習題306
9.20練習題306
9.21GUI補充材料文本的放置307
第10章設計疊代321
10.1概述321
10.2設計循環321
10.2.1非正式過程322
10.2.2選擇和定義變數322
10.2.3代碼框架322
10.2.4while條件323
10.2.5初始化324
10.2.6確保循環終止324
10.2.7完成循環體324
10.2.8重新檢查初始化325
10.2.9討論325
10.3Java小插曲兩個循環語句326
10.3.1for等價於while326
10.3.2for語句的靈活性326
10.4另一個簡單例子327
10.4.1乘法327
10.4.2非正式過程328
10.4.3選擇和定義變數328
10.4.4代碼框架328
10.4.5while條件328
10.4.6初始化329
10.4.7確保終止329
10.4.8完成循環體330
10.4.9重新檢查初始化330
10.4.10討論330
10.5重新考察循環模式330
10.5.1遍歷模式:查尋記
錄項331
10.5.2讀/處理模式:修理工
距離333
10.6修理工循環的變種336
10.6.1統計30個街區內的修
理工人數336
10.6.2尋找最近的修理工337
10.7合計銀行賬號338
10.8更多循環模式:計數器、累計器與
極值340
10.8.1循環模式:計數器340
10.8.2循環模式:累計器340
10.8.3循環模式:對象極值341
10.8.4循環模式:基本類型數
據中的極值342
10.9遍歷數組的疊代343
10.10Java 小插曲短路、break和
continue345
10.10.1短路345
10.10.2break和continue
語句346
10.11循環設計策略精化不完美的
解決方案348
10.12示例LOGO海龜352
10.13本章小結364
10.14關鍵術語364
10.15複習題364
10.16練習題365
10.17GUI補充材料更多文本
操作367
第11章維護對象集合381
11.1概述381
11.2搜尋381
11.3二分搜尋385
11.4尋找極值的下標392
11.5排序394
11.6搜尋檔案399
11.7執行緒並行計算403
11.7.1引入Thread類404
11.7.2一個簡單的執行緒示例405
11.8執行緒並行檔案搜尋407
11.9本章小結408
11.10關鍵術語409
11.11複習題409
11.12練習題409
11.13GUI補充材料執行緒410
第12章擴展類的行為420
12.1概述420·XVⅣ·
12.2擴展類——繼承 Ⅰ421
12.3一個更好的BufferedReader422
12.3.1問題陳述422
12.3.2情景422
12.3.3尋找主體422
12.3.4 確定行為422
12.3.5定義接口422
12.3.6定義實例變數423
12.3.7實現方法423
12.3.8類的完整實現424
12.4為子類添加狀態——訪問父類
狀態426
12.5回顧Name類——添加額外
狀態426
12.6Java小插曲繼承430
12.6.1基本機制與術語430
12.6.2構造器431
12.6.3繼承和isa關係432
12.6.4protected關鍵字433
12.6.5繼承與合成433
12.6.6繼承還是合成434
12.6.7常見錯誤434
12.6.8類的層次結構435
12.6.9Object類435
12.7覆蓋方法436
12.8Java小插曲多態436
12.8.1覆蓋機制436
12.8.2多態437
12.8.3覆蓋與重載438
12.9抽取共同行為——繼承Ⅱ439
12.10抽象方法和抽象類442
12.11規定公共行為——接口444
12.12一種通用排序算法446
12.13本章小結449
12.14關鍵術語450
12.15複習題451
12.16練習題451
12.17GUI補充材料探究Java類
層次結構中的抽象視窗工具箱
(Abstract Window Toolkit)452
第13章異常460
13.1預計異常460
13.2遇到異常460
13.2.1拋出異常461
13.2.2throws子句463
13.3Java小插曲Exception類463
13.3.1標註異常463
13.3.2Checked Exception 與
RuntimeException463
13.4處理異常464
13.5對異常的責任468
13.6異常並非總是錯誤469
13.7本章小結470
13.8關鍵術語471
13.9複習題471
13.10練習題471
13.11GUI補充材料模型視圖控
制器(MVC)範式472
第14章遞歸482
14.1概述482
14.2示例求冪483
14.2.1遞歸調用484
14.2.2結束485
14.3如何設計遞歸方法485
14.3.1讀取數據來構造一個Repair
Person對象的集合485
14.3.2在集合中尋找最近的修
理工486
14.3.3兩種遞歸模式487
14.4遞歸方法——幕後探秘488
14.5在向量、數組和字元串中
使用遞歸492
14.6排列495
14.7Hanoi塔498
14.7.1智力遊戲498
14.7.2找出簡單的方法499
14.7.3問題闡述502
14.7.4場景502
14.7.5實現方法504
14.8遞歸和疊代510
14.9本章小結512
14.10關鍵術語512
14.11複習題513
14.12練習題513
14.13GUI補充材料Hanoi塔
小應用程式515
第15章客戶伺服器計算533
15.1客戶端和伺服器533
15.2Internet通信533
15.2.1套接字534
15.2.2TCPConnection類535
15.3客戶伺服器計算537
15.4一些簡單的客戶端類539
15.4.1WebClient類539
15.4.2MailClient類541
15.4.3處理客戶端異常544
15.5本章小結547
15.6關鍵術語547
15.7複習題547
15.8練習題548
15.9GUI補充材料Swing548
附錄A三個Java環境558
A.1引言558
A.2Macintosh環境558
A.3UNIX/Linux環境558
A.4Windows環境559
附錄BAWIO561
B.1引言561
B.2使用AWIO進行輸出561
B.2.1AWPrinter類561
B.2.2什麼東西會出錯呢562
B.3使用AWIO進行鍵盤輸入563
B.4互動式輸入/輸出565
B.5使用AWIO進行磁碟檔案輸入565
B.6在本書的其餘部分使用AWIO566
附錄C使用Enumeration遍歷集合568
C.1遍歷矢量——Enumeration568
C.2另一個循環模式——列舉集合
元素569