圖書信息
著 者:(美)Walter Savitch(沃爾特·薩維奇), Kenrick Mock(肯里克·莫克)
作 譯 者:師蓉
出版時間:2018-01
版 次:01-01
開 本:16開
印 次:01-01
I S B N :9787121328664
內容簡介
本書側重於面向對象設計,通過淺顯易懂的語言和代碼,很好地平衡了完整實例和解釋性討論,並圍繞著Java 語言的特性全面透徹地介紹諸多編程技術。書中全面介紹了Java 語言已經實現的封裝、繼承和多態性技術,並在介紹Swing GUI 的時候提及了事件驅動的編程,在介紹UML 和模式的同時進一步介紹了OOP。本書每節後都設計了相應的練習題,每章後都有針對本章內容的編程項目。本書不僅適合初學者使用,還可以作為使用Java 的後續計算機科學課程的參考書。
圖書目錄
第1章 入門知識 1
1.1 Java簡介 2
Java語言的起源 ★ 2
對象和方法 3
小程式(applet)★ 4
一個Java應用程式示例 4
位元組碼和Java虛擬機 7
類裝載器★ 9
編譯一個Java程式或類 9
運行一個Java程式 9
小貼士:錯誤訊息 10
1.2 表達式和賦值語句 11
標識符 11
變數 12
賦值語句 14
小貼士:初始化變數 15
更多賦值語句知識★ 16
賦值兼容性 17
常量 18
算數運算符和表達式 19
括弧和優先權規則★ 20
整數和浮點數除法 22
陷阱:浮點數的捨入錯誤 22
陷阱:整數相除 23
類型轉換 24
自增運算符和自減運算符 25
1.3 String類 27
字元串常量和變數 27
字元串連線 28
類 29
String類的方法 30
轉義字元 34
字元串處理 35
Unicode字元集★ 36
1.4 程式風格 37
命名常量 37
Java拼寫約定 39
注釋 40
縮進 41
本章小結 41
自測題答案 42
編程項目 44
第2章 流程控制 47
2.1 螢幕輸出 48
System.out.println 48
小貼士:編輯輸出格式的不同方法 50
使用printf編輯輸出格式 51
小貼士:用printf編輯金額格式 54
小貼士:遺留代碼 55
使用NumberFormat編輯金額輸出格式 ★ 56
導入包和類 58
DecimalFormat類 ★ 59
2.2 使用Scanner類進行控制台輸入 62
Scanner類 63
陷阱:行終止符'n'的處理 67
空字元串 68
小貼士:輸入提示 68
小貼士:輸入反饋 68
示例:自助結賬程式 70
其他輸入分隔設定 70
2.3 檔案輸入簡介 72
用Scanner類進行文本檔案輸入 72
本章小結 75
自測題答案 75
編程項目 77
第3章 控制流 81
3.1 分支機制 82
if-else語句 82
省略else 83
複合語句 83
小貼士:放置花括弧 84
嵌套語句 85
多分支if-else語句 86
示例:州所得稅 86
switch語句 88
陷阱:忘記switch語句中的break 91
條件運算符 ★ 92
3.2 布爾表達式 92
簡單布爾表達式 93
陷阱:用=代替== 93
陷阱:使用==比較字元串 94
字典順序和字母順序 95
建立布爾表達式 97
陷阱:不等式串 98
計算布爾表達式 98
小貼士:命名布爾boolean變數 101
短路求值與完整求值 101
優先權和結合規則 102
3.3 循環 107
while語句和do-while語句 108
算法和偽代碼 110
示例:分數列表的平均分 112
for語句 113
for語句中的逗號 115
小貼士:重複N次循環 116
陷阱:for語句中多餘的分號 116
陷阱:無限循環 117
嵌套循環 118
break語句和continue語句★ 120
exit語句 121
3.4 調試 122
循環bug 122
跟蹤變數 122
常規調試技術 123
示例:調試一個輸入驗證循環 124
預防性編碼 127
斷言檢查★ 127
3.5 生成隨機數★ 129
Random對象 130
Math.random( )方法 131
本章小結 132
自測題答案 132
編程項目 136
第4章 類的定義 I 141
4.1 類的定義概述 142
實例變數和方法 145
方法續論 147
小貼士:任何方法都能用作void方法 150
局部變數 152
塊 152
小貼士:在一個for語句中聲明變數 153
原始類型參數 154
陷阱:術語“形參”和“實參”的使用 159
類參數的簡單示例 160
this參數 160
返回布爾值的方法 162
方法equals和toString 164
遞歸方法 166
小貼士:對方法進行測試 167
4.2 信息的隱藏和封裝 168
修飾符public和private 169
示例:另一個日期類 170
get和set方法 171
小貼士:一個類可以訪問該類所有對象的私有成員 174
小貼士:set方法可以返回一個布爾值 175
前置條件和後置條件 176
4.3 重載 177
重載的規則 177
陷阱:重載與自動類型轉換 180
陷阱:不能根據返回類型進行重載 182
4.4 構造函式 183
構造函式的定義 183
小貼士:你可以在構造函式中調用另一個方法 190
小貼士:構造函式帶有一個this參數 190
小貼士:添加一個無參數構造函式 190
示例:日期類的最終版本 191
默認變數初始化 192
另一種初始化實例變數的方法 192
示例:一個寵物記錄類 193
StringTokenizer類★ 196
本章小結 200
自測題答案 201
編程項目 204
第5章 類的定義 II 211
5.1 靜態方法和靜態變數 212
靜態方法 212
陷阱:在靜態方法中調用非靜態方法 215
小貼士:你可以在任何類中放置main函式 215
靜態變數 218
Math類 222
封裝類 225
自動裝箱和拆箱 226
封裝類中的靜態方法 227
陷阱:封裝類沒有無參數構造函式 229
5.2 引用和類參數 231
變數和記憶體 231
引用 232
類參數 237
陷阱:對類類型的變數使用=和== 240
常量null 241
陷阱:空指針異常 242
new運算符和匿名對象 242
示例:鍵盤輸入的另一種方法★ 243
小貼士:使用靜態導入★ 245
5.3 引用的使用和濫用 246
示例:Person類 246
陷阱:null可以作為方法的參數 251
拷貝構造函式 253
陷阱:隱私泄露 255
可變類和不可變類 258
小貼士:深拷貝vs.淺拷貝 259
小貼士:假設你的同事是惡意的 260
5.4 包和javadoc 260
包和import語句 261
java.lang包 262
包名和目錄 262
陷阱:子類不是自動導入的 264
默認包 264
陷阱:不要在類路徑中包含當前目錄 264
編譯時指定類路徑★ 265
命名衝突★ 266
javadoc簡介 ★ 266
為javadoc注釋類★ 267
運行javadoc★ 268
本章小結 269
自測題答案 270
編程項目 273
第6章 數組 279
6.1 數組簡介 280
數組的創建和訪問 280
length實例變數 283
小貼士:在數組中使用for循環 284
陷阱:數組下標總是從0開始 285
陷阱:數組越界 285
數組的初始化 285
陷阱:字元數組不是字元串 287
6.2 數組和引用 287
數組是對象 288
陷阱:具有類基本類型的數組 289
數組參數 289
陷阱:在數組中使用=和== 291
main方法的參數★ 294
返回數組的方法 295
6.3 用數組進行編程 297
部分填充數組 297
示例:部分填充數組的類 300
小貼士:get方法不需要返回實例變數 303
“for-each”循環★ 303
參數個數可變的方法★ 306
示例:一個字元串處理示例★ 308
數組實例變數的隱私泄露 309
示例:對數組排序 312
枚舉類型★ 315
小貼士:在switch語句中使用枚舉類型★ 319
6.4 多維數組 321
多維數組的基礎知識 321
使用length實例變數 323
參差數組★ 323
多維數組參數和返回值 324
示例:一個成績冊類 325
本章小結 330
自測題答案 330
編程項目 336
第7章 繼承 343
7.1 繼承的基礎知識 344
派生類 344
重寫方法的定義 352
修改重寫方法的返回類型 353
修改重寫方法的訪問許可權 354
陷阱:重寫 vs. 重載 354
super構造函式 355
this構造函式 356
小貼士:派生類的對象有多個類型 357
陷阱:術語子類和超類 359
示例:增強的StringTokenizer類★ 359
7.2 封裝和繼承 362
陷阱:基類中私有變數的使用 362
陷阱:私有方法不能被有效地繼承 364
受保護訪問和包訪問 364
陷阱:忘記默認包 366
陷阱:受保護訪問的限制★ 366
7.3 使用繼承編程 368
小貼士:靜態變數是繼承的 368
小貼士:“is a”vs. “has a” 369
訪問重新定義的基類方法 369
陷阱:你不能使用多個super 370
Object類 371
定義equals的正確方式 371
小貼士:getClass vs. instanceof★ 373
本章小結 377
自測題答案 377
編程項目 380
第8章 多態與抽象類 385
8.1 多態 386
後期綁定 386
final修飾符 388
示例:銷售記錄 389
在toString中使用後期綁定 394
陷阱:靜態方法不使用後期綁定 395
向下轉型和向上轉型 396
陷阱:向下轉型 398
小貼士:檢查向下轉型是否是合法的 399
clone方法淺析 400
陷阱:有時clone方法的返回類型是對象 401
陷阱:拷貝構造函式的限制★ 402
8.2 抽象類 405
抽象類綜述 405
陷阱:你無法創建抽象類的實例 408
小貼士:抽象類是一種類型 409
本章小結 410
自測題答案 410
編程項目 412
第9章 異常處理 415
9.1 異常處理基礎知識 416
try-catch機制 417
用Scanner類進行異常處理 418
小貼士:異常控制的循環 419
拋出異常 421
示例:異常處理的“玩具”示例 422
異常類 426
標準包中的異常類 427
定義異常類 428
小貼士:保留getMessage 432
小貼士:異常類可以攜帶任何類型的訊息 434
多個catch塊 438
陷阱:先捕獲更具體的異常 439
9.2 在方法中拋出異常 441
在方法中拋出異常概述 441
在throws從句中聲明異常 443
捕獲或聲明規則的例外情況 445
派生類中的throws從句 447
何時使用異常 447
示例:檢索高分 448
事件驅動編程★ 451
9.3 更多異常處理編程技術 452
陷阱:嵌套的try-catch塊 452
finally塊★ 452
重新拋出異常★ 454
AssertionError類★ 454
ArrayIndexOutOfBoundsException 454
本章小結 455
自測題答案 455
編程項目 459
第10章 檔案I/O 463
10.1 檔案I/O簡介 464
流 464
文本檔案和二進制檔案 465
10.2 文本檔案 466
寫入文本檔案 466
陷阱:try塊是一個塊 470
陷阱:覆蓋輸出檔案 471
追加到文本檔案末尾 471
小貼士:toString可以幫助文本檔案的輸出 472
從文本檔案中讀取 473
使用Scanner讀取文本檔案 473
用Scanner測試文本檔案的結束 475
使用BufferedReader讀取文本檔案 480
小貼士:用BufferedReader讀取數字 483
用BufferedReader測試文本檔案的結束 484
路徑名 485
嵌套的構造函式調用 486
System.in、System.out和System.err 487
10.3 File類 489
用File類編程 489
10.4 二進制檔案★ 492
將簡單數據寫入二進制檔案中 493
UTF和writeUTF 496
從二進制檔案中讀取簡單數據 497
檢查二進制檔案的結束 501
陷阱:用錯誤的方式檢查檔案結束 502
對象的二進制I/O 503
Serializable接口 505
陷阱:將類類型混合在同一個檔案中 506
二進制檔案中的數組對象 506
10.5 隨機存取二進制檔案★ 508
讀寫同一個檔案 508
陷阱:RandomAccessFile不需要從空檔案開始 512
本章小結 512
自測題答案 513
編程項目 516
第11章 遞歸 521
11.1 遞歸void方法 522
示例:垂直顯示的數字 523
跟蹤遞歸調用 525
遞歸詳解 527
陷阱:無限遞歸 528
遞歸的棧★ 530
陷阱:棧溢出★ 531
遞歸與疊代 531
11.2 返回值的遞歸方法 532
返回值的遞歸方法的一般形式 532
示例:另一個冪方法 532
11.3 遞歸思維 536
遞歸設計技巧 536
二分查找★ 537
二分查找的效率★ 542
示例:查找一個檔案 543
本章小結 546
自測題答案 546
編程項目 550
第12章 UML和模式 555
12.1 UML 556
UML的歷史 557
UML類圖 557
類互動 557
繼承圖 558
UML的更多知識 559
12.2 模式 ★ 560
適配器模式★ 560
模型-視圖-控制器模式★ 560
示例:排序模式 561
排序模式的限制 566
排序模式的效率★ 567
小貼士:語用學和模式 567
模式形式 567
本章小結 568
自測題答案 568
編程項目 570
第13章 接口和內部類 573
13.1 接口 574
接口概述 574
抽象類實現接口 576
派生接口 577
陷阱:接口語義不會被強制執行 578
Comparable接口 579
示例:使用Comparable接口 580
接口中的預定義常量 584
陷阱:不一致的接口 584
Serializable接口★ 587
Cloneable接口 587
13.2 內部類的簡單使用 590
幫助類 590
小貼士:內部類和外部類可以訪問彼此的私有成員 591
示例:一個銀行賬戶類 591
內部類的.class檔案 595
陷阱:內部類的其他用途 595
13.3 內部類的更多內容 595
靜態內部類 595
公有內部類 596
小貼士:調用外部類的方法 598
嵌套內部類 599
內部類和繼承 599
匿名類 600
小貼士:為什麼要使用內部類 602
本章小結 602
自測題答案 603
編程項目 607
第14章 泛型和ArrayList類 611
14.1 ArrayList類 612
使用ArrayList類 613
小貼士:在ArrayList中添加元素的總結 617
ArrayList類中的方法 618
“for-each”循環 620
示例:高爾夫球成績 623
小貼士:使用trimToSize節約記憶體 625
陷阱:clone方法會進行淺拷貝★ 625
Vector類 626
參數化的類和泛型 627
陷阱:非參數化的ArrayList和Vector類 627
14.2 泛型 627
泛型基礎知識 627
陷阱:用-Xlint選項編譯 629
示例:有序對的泛型類 629
陷阱:泛型構造函式名沒有類型參數 632
陷阱:你不能用原始類型替換類型參數 633
陷阱:並不是在使用類型名稱的任何地方都可以使用類型參數 633
陷阱:泛型類的實例化不可以是數組基本類型 633
小貼士:類定義中可以有多個類型參數 634
陷阱:泛型類不能是異常類 635
類型參數的限制 636
小貼士:泛型接口 638
泛型方法★ 638
泛型類的繼承★ 639
本章小結 641
自測題答案 641
編程項目 643
第15章 鏈式數據結構 647
15.1 Java鍊表 649
示例:簡單的鍊表類 649
使用鍊表 652
陷阱:隱私泄露 657
節點內部類 657
示例:泛型鍊表 660
陷阱:使用Node,而不是Node 664
鍊表的equals方法 664
15.2 拷貝構造函式和clone方法★ 665
簡單的拷貝構造函式和clone方法★ 666
異常★ 666
陷阱:clone方法在Object中是受保護的★ 668
小貼士:使用類型參數限制可以得到更好的clone方法★ 669
示例:帶有深拷貝clone方法的鍊表★ 672
小貼士:克隆是一種“全有或者全無”事件 674
15.3 疊代器 675
定義一個疊代器類 675
添加和刪除節點 680
15.4 鍊表的變形 683
雙向鍊表 683
棧數據結構 691
佇列數據結構 693
運行時間和大O符號 695
鍊表的效率 699
15.5 鏈式哈希表 700
字元串的哈希函式 701
哈希表的效率 704
15.6 set 704
set的基本操作 705
使用鍊表的set的效率 709
15.7 樹 710
樹的性質 710
示例:一個二叉查找樹類 ★ 712
二叉查找樹的效率★ 716
本章小結 716
自測題答案 717
編程項目 722
第16章 集合、映射和疊代器 725
16.1 集合 726
通配符 727
集合框架 728
陷阱:可選操作 733
小貼士:處理所有這些異常 733
具體的集合類 734
ArrayList和Vector之間的區別 741
集合框架的非參數化版本★ 742
陷阱:省略 742
16.2 Map映射 742
具體的Map類 744
16.3 疊代器 748
疊代器的概念 748
Iterator接口 748
小貼士:for-each循環作為疊代器 750
列表疊代器 751
陷阱:next可以返回一個引用 753
小貼士:定義自己的疊代器類 754
本章小結 755
自測題答案 755
編程項目 756
第17章 Swing I 761
17.1 事件驅動編程 762
事件和監聽器 763
17.2 按鈕、事件和其他Swing基礎知識 764
示例:一個簡單的視窗 764
陷阱:忘記編寫關閉視窗按鈕的代碼 768
按鈕 769
動作監聽器和動作事件 770
陷阱:修改actionPerformed的方法頭 771
小貼士:結束一個Swing程式 772
示例:第一個Swing GUI的更好版本 772
標籤 775
顏色 776
示例:一個帶有標籤和顏色的GUI 777
17.3 容器和布局管理器 779
邊界布局管理器 779
流布局管理器 782
格線布局管理器 783
面板 786
示例:用面板創建3種顏色 787
Container類 790
小貼士:分別編寫GUI的外觀和動作 792
模型-視圖-控制器模式★ 793
17.4 選單和按鈕 793
示例:一個帶有選單的GUI 794
選單、選單項和選單欄 794
嵌套選單★ 798
AbstractButton類 798
setActionCommand方法 801
監聽器作為內部類★ 802
17.5 文本框和文本域 804
文本框和文本域概述 804
小貼士:給文本域添加標籤 809
小貼士:輸入和輸出數字 810
一個Swing計算器 810
本章小結 815
自測題答案 815
編程項目 821
第18章 Swing II 823
18.1 視窗監聽器 824
示例:一個視窗監聽器內部類 825
dispose方法 828
陷阱:忘記調用setDefaultCloseOperation 829
WindowAdapter類 829
18.2 圖示和滾動條 831
圖示 831
滾動條 836
示例:可以改變可見性的組件 840
18.3 Graphics類 842
圖形對象的坐標系統 842
paint方法和Graphics類 843
繪製橢圓 848
繪製弧線 848
圓角矩形★ 851
面板的paintComponent 851
動作繪製和repaint 852
更新GUI的更多細節★ 856
18.4 顏色 857
指定繪圖顏色 857
定義顏色 858
陷阱:使用double定義顏色 859
JColorChooser對話框視窗 860
18.5 字型drawString方法 862
drawString方法 863
字型 864
本章小結 867
自測題答案 867
編程項目 871
第19章 Java永不落幕 875
19.1 多執行緒 876
示例:一個無回響的GUI 877
Thread.sleep 877
getGraphics方法 880
使用執行緒修復一個無回響的程式 881
示例:一個多執行緒程式 881
Thread類 881
Runnable接口★ 884
競爭條件和執行緒同步★ 886
19.2 流套接字網路 890
套接字 890
套接字和執行緒 893
URL類 894
19.3 JavaBeans 895
組件模式 895
JavaBeans模型 895
19.4 Java和資料庫連線 896
關係資料庫 896
Java DB和JDBC 897
SQL 898
19.5 用JSP進行Web編程 906
applet、servlet和JSP 906
Oracle GlassFish企業級伺服器 908
HTML表單——通用網關接口 909
JSP聲明、表達式、scriptlet和指令 911
19.6 淺談Java 8中的函式式編程 918
19.7 淺談JavaFX 924
本章小結 936
自測題答案 937
編程項目 938
第20章 applet和HTML1
附錄A 關鍵字 941
附錄B 優先權和結合性規則 943
附錄C ASCII字元集 945
附錄D printf的格式規範 947
附錄E 類和接口總結 949