Java 語言程序設計 (基礎篇), 12/e (Introduction to Java Programming and Data Structures, Comprehensive Version, 12/e)

[美] 梁勇(Y. Daniel Liang) 著

買這商品的人也買了...

商品描述

本書是Java語言的經典教材,20多年來暢銷不衰,被世界各地的大學選作教材。全書採用“基礎優先,問題驅動”的教學方式,實現了程序設計、數據結構和算法的無縫整合。書中循序漸進地介紹了程序設計基礎知識、問題求解方法、面向對象思想、採用JavaFX的GUI編程、查找和排序、樹和圖等內容。此外,本書還深入探討了一些高級主題,包括多線程和並行、數據庫編程、Web應用開發、國際化支持等內容。
本書中文版由“基礎篇”和“進階篇”組成,基礎篇對應原書的第1~18章,進階篇對應原書的第19~30章,便於教師按需選擇教材。
本書特色
更新至Java 9、10和11,使用Java新特性對示例進行了改進和簡化。
精心設計了大量示例,詳細呈現問題求解的步驟,並且隨著學習進程的推進不斷深入。所有代碼均可免費下載,部分示例還新增了算法動畫演示和視頻註解。
配備大量編程練習題,涉及商業、游戲、媒體等眾多應用領域,分為四個難度等級,幫助讀者在動手實踐中理解並掌握所學知識。

作者簡介

作者簡介
梁勇(Y. Daniel Liang) 現為阿姆斯特朗亞特蘭大州立大學計算機科學系教授。
之前曾是普渡大學計算機科學系副教授,併兩次獲得普渡大學傑出研究獎。
他所編寫的Java教程在美國大學Java課程中採用率極高,同時他還兼任Prentice Hall Java系列叢書的編輯。
他是“Java Champion”榮譽得主,並在世界各地為在校學生和程序員做Java程序設計方法及技術方面的講座。


譯者簡介
戴開宇復旦大學軟件學院教師,工程碩士導師,中國計算機學會會員。
博士畢業於上海交通大學計算機應用專業,2011~2012年在美國佛羅里達大學作訪問學者。
承擔多門本科專業課程、通識教育課程以及工程碩士課程,這些課程被評為校精品課程、上海市重點建設課程、IBM-教育部精品課程等。

目錄大綱

出版者的話
中文版序
譯者序
前言

第1章 電腦、程序和Java概述 1
1.1 引言 1
1.2 什麽是電腦 2
1.2.1 中央處理器 2
1.2.2 比特和字節 3
1.2.3 內存 3
1.2.4 存儲設備 4
1.2.5 輸入和輸出設備 5
1.2.6 通信設備 5
1.3 編程語言 6
1.3.1 機器語言 6
1.3.2 匯編語言 6
1.3.3 高級語言 7
1.4 操作系統 8
1.4.1 控制和監視系統活動 8
1.4.2 分配和調配系統資源 9
1.4.3 調度操作 9
1.5 Java的特性和應用 9
1.6 Java語言規範、API、JDK、JRE和IDE 10
1.7 一個簡單的Java程序 11
1.8 創建、編譯和執行Java程序 13
1.9 程序設計風格和文檔 16
1.9.1 正確的註釋和註釋風格 16
1.9.2 正確的縮進和空白 17
1.9.3 塊的風格 17
1.10 程序設計錯誤 18
1.10.1 語法錯誤 18
1.10.2 運行時錯誤 18
1.10.3 邏輯錯誤 19
1.10.4 常見錯誤 19
1.11 使用NetBeans開發Java程序 20
1.11.1 創建Java項目 21
1.11.2 創建Java類 22
1.11.3 編譯和運行類 22
1.12 使用Eclipse開發Java程序 23
1.12.1 創建Java項目 23
1.12.2 創建Java類 24
1.12.3 編譯和運行類 25
關鍵術語 25
本章小結 26
測試題 27
編程練習題 27

第2章 基本程序設計 29
2.1 引言 29
2.2 編寫簡單的程序 29
2.3 從控制台讀取輸入 32
2.4 標識符 35
2.5 變量 35
2.6 賦值語句和賦值表達式 37
2.7 命名常量 38
2.8 命名習慣 39
2.9 數值數據類型和操作 39
2.9.1 從鍵盤讀取數值 40
2.9.2 數值操作符 41
2.9.3 指數運算 42
2.10 數值型字面值 43
2.10.1 整型字面值 43
2.10.2 浮點型字面值 43
2.10.3 科學記數法 44
2.11 JShell 44
2.12 表達式求值和操作符優先級 46
2.13 示例學習:顯示當前時間 48
2.14 增強賦值操作符 49
2.15 自增和自減操作符 50
2.16 數值類型轉換 52
2.17 軟件開發過程 54
2.18 示例學習:計算貨幣單位 58
2.19 常見錯誤和陷阱 60
關鍵術語 62
本章小結 62
測試題 63
編程練習題 63

第3章 選擇 68
3.1 引言 68
3.2 boolean數據類型、值和表達式 68
3.3 if語句 70
3.4 雙分支if-else語句 72
3.5 嵌套的if語句和多分支if-else語句 73
3.6 常見錯誤和陷阱 75
3.7 產生隨機數 79
3.8 示例學習:計算體重指數 80
3.9 示例學習:計算稅率 82
3.10 邏輯操作符 84
3.11 示例學習:判斷閏年 88
3.12 示例學習:彩票 89
3.13 switch語句 90
3.14 條件操作符 93
3.15 操作符的優先級和結合規則 95
3.16 調試 96
關鍵術語 96
本章小結 97
測試題 97
編程練習題 97

第4章 數學函數、字符和字符串 106
4.1 引言 106
4.2 常用數學函數 107
4.2.1 三角函數方法 107
4.2.2 指數函數方法 107
4.2.3 舍入方法 108
4.2.4 min、max和abs方法 108
4.2.5 random方法 109
4.2.6 示例學習:計算三角形的角度 109
4.3 字符數據類型和操作 111
4.3.1 Unicode和ASCII碼 111
4.3.2 特殊字符的轉義序列 112
4.3.3 字符型數據與數值型數據之間的類型轉換 113
4.3.4 比較和測試字符 114
4.4 String類型 115
4.4.1 獲取字符串長度 116
4.4.2 從字符串中獲取字符 116
4.4.3 連接字符串 117
4.4.4 轉換字符串 118
4.4.5 從控制台讀取字符串 118
4.4.6 從控制台讀取字符 119
4.4.7 字符串比較 119
4.4.8 獲得子字符串 121
4.4.9 查找字符串中的字符或者子串 121
4.4.10 字符串和數值間的轉換 122
4.5 示例學習 124
4.5.1 猜測生日 124
4.5.2 將十六進制數轉換為十進制數 127
4.5.3 使用字符串修改彩票程序 129
4.6 格式化控制台輸出 130
關鍵術語 134
本章小結 134
測試題 134
編程練習題 134

第5章 循環 140
5.1 引言 140
5.2 while循環 141
5.3 示例學習:猜數字 143
5.4 循環設計策略 146
5.5 使用用戶確認或標記值控制循環 148
5.6 do-while循環 151
5.7 for循環 153
5.8 採用哪種循環 156
5.9 嵌套循環 158
5.10 最小化數值錯誤 160
5.11 示例學習 161
5.11.1 求最大公約數 161
5.11.2 預測未來學費 163
5.11.3 將十進制數轉換為十六進制數 163
5.12 關鍵字break和continue 165
5.13 示例學習:判斷迴文 168
5.14 示例學習:顯示素數 170
關鍵術語 172
本章小結 172
測試題 172
編程練習題 173

第6章 方法 181
6.1 引言 181
6.2 定義方法 182
6.3 調用方法 183
6.4 空方法與有返回值的方法 186
6.5 按值傳參 188
6.6 模塊化代碼 192
6.7 示例學習:將十六進制數轉換為十進制數 194
6.8 重載方法 195
6.9 變量的作用域 198
6.10 示例學習:生成隨機字符 199
6.11 方法抽象和逐步求精 201
6.11.1 自頂向下的設計 202
6.11.2 自頂向下和自底向上的實現 203
6.11.3 實現細節 205
6.11.4 逐步求精的優勢 207
關鍵術語 208
本章小結 208
測試題 209
編程練習題 209

第7章 一維數組 219
7.1 引言 219
7.2 數組基礎 219
7.2.1 聲明數組變量 220
7.2.2 創建數組 220
7.2.3 數組大小和默認值 221
7.2.4 訪問數組元素 221
7.2.5 數組初始化簡寫語句 222
7.2.6 處理數組 222
7.2.7 foreach循環 224
7.3 示例學習:分析數字 226
7.4 示例學習:一副牌 227
7.5 復制數組 229
7.6 將數組傳遞給方法 230
7.7 方法返回數組 233
7.8 示例學習:統計每個字母出現的次數 234
7.9 可變長參數列表 237
7.10 查找數組 238
7.10.1 線性查找 238
7.10.2 二分查找 239
7.11 排序數組 241
7.12 Arrays類 243
7.13 命令行參數 245
7.13.1 向main方法傳遞字符串 245
7.13.2 示例學習:計算器 245
關鍵術語 247
本章小結 247
測試題 248
編程練習題 248

第8章 多維數組 256
8.1 引言 256
8.2 二維數組基礎 257
8.2.1 聲明二維數組變量並創建二維數組 257
8.2.2 獲取二維數組的長度 258
8.2.3 不規則數組 258
8.3 處理二維數組 259
8.4 將二維數組傳遞給方法 261
8.5 示例學習:給多選題測驗評分 262
8.6 示例學習:找出最近點對 264
8.7 示例學習:數獨 266
8.8 多維數組 269
8.8.1 示例學習:每日溫度和濕度 270
8.8.2 示例學習:猜生日 271
關鍵術語 273
本章小結 273
測試題 273
編程練習題 273

第9章 對象和類 285
9.1 引言 285
9.2 為對象定義類 286
9.3 示例:定義類和創建對象 287
9.4 使用構造方法構造對象 292
9.5 通過引用變量訪問對象 293
9.5.1 訪問對象的數據和方法 294
9.5.2 引用數據域和null值 295
9.5.3 基本類型變量和引用類型變量的區別 296
9.6 使用Java庫中的類 297
9.6.1 Date類 297
9.6.2 Random類 298
9.6.3 Point2D類 299
9.7 靜態變量、常量和方法 300
9.8 可見性修飾符 305
9.9 數據域封裝 307
9.10 向方法傳遞對象參數 309
9.11 對象數組 313
9.12 不可變對象和類 315
9.13 變量的作用域 316
9.14 this引用 318
9.14.1 使用this引用數據域 318
9.14.2 使用this調用構造方法 319
關鍵術語 320
本章小結 321
測試題 321
編程練習題 321

第10章 面向對象 326
10.1 引言 326
10.2 類的抽象和封裝 326
10.3 面向對象思想 330
10.4 類的關系 333
10.4.1 關聯 333
10.4.2 聚集和組合 334
10.5 示例學習:設計Course類 335
10.6 示例學習:設計棧類 337
10.7 將基本數據類型值作為對象處理 340
10.8 基本類型和包裝類類型之間的自動轉換 343
10.9 BigInteger和BigDecimal類 344
10.10 String類 345
10.10.1 不可變字符串與駐留字符串 346
10.10.2 替換和拆分字符串 347
10.10.3 使用模式匹配、替換和拆分 348
10.10.4 字符串與數組之間的轉換 349
10.10.5 將字符和數值轉換成字符串 349
10.10.6 格式化字符串 350
10.11 StringBuilder類和StringBuffer類 352
10.11.1 修改StringBuilder中的字符串 353
10.11.2 toString、capacity、length、setLength和charAt方法 354
10.11.3 示例學習:判斷迴文串時忽略既非字母又非數字的字符 355
關鍵術語 358
本章小結 358
測試題 358
編程練習題 358

第11章 繼承和多態 366
11.1 引言 366
11.2 父類和子類 366
11.3 使用super關鍵字 372
11.3.1 調用父類的構造方法 372
11.3.2 構造方法鏈 373
11.3.3 調用父類的普通方法 374
11.4 方法重寫 375
11.5 方法重寫與重載 376
11.6 Object類及其toString()方法 378
11.7 多態 379
11.8 動態綁定 379
11.9 對象轉換和instanceof操作符 383
11.10 Object類的equals方法 387
11.11 ArrayList類 388
11.12 關於列表的一些有用方法 393
11.13 示例學習:自定義棧類 394
11.14 protected數據和方法 396
11.15 防止繼承和重寫 398
關鍵術語 399
本章小結 399
測試題 399
編程練習題 400

第12章 異常處理和文本I/O 404
12.1 引言 404
12.2 異常處理概述 405
12.3 異常類型 410
12.4 聲明、拋出和捕獲異常 411
12.4.1 聲明異常 412
12.4.2 拋出異常 412
12.4.3 捕獲異常 413
12.4.4 從異常中獲取信息 415
12.4.5 示例學習:聲明、拋出和捕獲異常 416
12.5 finally子句 419
12.6 何時使用異常 421
12.7 重新拋出異常 422
12.8 鏈式異常 422
12.9 創建自定義異常類 423
12.10 File類 426
12.11 文件輸入和輸出 429
12.11.1 使用PrintWriter寫數據 429
12.11.2 使用try-with-resources自動關閉資源 430
12.11.3 使用Scanner讀取數據 431
12.11.4 Scanner如何工作 433
12.11.5 示例學習:替換文本 434
12.12 從Web上讀取數據 436
12.13 示例學習:Web爬蟲 437
關鍵術語 440
本章小結 440
測試題 441
編程練習題 441

第13章 抽象類和接口 446
13.1 引言 446
13.2 抽象類 446
13.2.1 為何使用抽象方法 448
13.2.2 抽象類的幾點說明 450
13.3 示例學習:抽象的Number類 451
13.4 示例學習:Calendar和GregorianCalendar 453
13.5 接口 456
13.6 Comparable接口 459
13.7 Cloneable接口 463
13.8 接口與抽象類 468
13.9 示例學習:Rational類 471
13.10 類的設計原則 477
13.10.1 內聚性 477
13.10.2 一致性 477
13.10.3 封裝性 477
13.10.4 清晰性 477
13.10.5 完整性 478
13.10.6 實例和靜態 478
13.10.7 繼承和聚合 479
13.10.8 接口和抽象類 479
關鍵術語 479
本章小結 479
測試題 480
編程練習題 480

第14章 JavaFX基礎 484
14.1 引言 484
14.2 JavaFX與Swing和AWT的比較 484
14.3 JavaFX程序的基本結構 485
14.4 面板、組、UI控件和形狀 487
14.5 屬性綁定 490
14.6 結點的共同屬性和方法 493
14.7 Color類 494
14.8 Font類 496
14.9 Image和ImageView類 497
14.10 佈局面板和組 500
14.10.1 FlowPane 500
14.10.2 GridPane 502
14.10.3 BorderPane 504
14.10.4 HBox和VBox 506
14.11 形狀 508
14.11.1 Text 508
14.11.2 Line 510
14.11.3 Rectangle 511
14.11.4 Circle和Ellipse 513
14.11.5 Arc 515
14.11.6 Polygon和Polyline 517
14.12 示例學習:ClockPane類 520
關鍵術語 525
本章小結 525
測試題 525
編程練習題 526

第15章 事件驅動編程和動畫 531
15.1 引言 531
15.2 事件和事件源 533
15.3 註冊處理器和處理事件 534
15.4 內部類 538
15.5 匿名內部類處理器 539
15.6 使用lambda表達式簡化事件處理 542
15.7 示例學習:貸款計算器 546
15.8 鼠標事件 548
15.9 鍵盤事件 549
15.10 可觀察對象的監聽器 552
15.11 動畫 554
15.11.1 PathTransition 555
15.11.2 FadeTransition 558
15.11.3 Timeline 559
15.12 示例學習:彈球 562
15.13 示例學習:美國地圖 565
關鍵術語 568
本章小結 569
測試題 569
編程練習題 569

第16章 JavaFX UI控件和多媒體 576
16.1 引言 576
16.2 Labeled和Label 577
16.3 Button 579
16.4 CheckBox 581
16.5 RadioButton 584
16.6 TextField 586
16.7 TextArea 588
16.8 ComboBox 591
16.9 ListView 594
16.10 ScrollBar 597
16.11 Slider 600
16.12 示例學習:開發井字游戲 603
16.13 視頻和音頻 608
16.14 示例學習:國旗和國歌 611
本章小結 613
測試題 614
編程練習題 614

第17章 二進制 I/O 620
17.1 引言 620
17.2 Java如何處理文本I/O 620
17.3 文本I/O與二進制I/O 621
17.4 二進制I/O類 623
17.4.1 FileInputStream和FileOutputStream 624
17.4.2 FilterInputStream和FilterOutputStream 626
17.4.3 DataInputStream和DataOutputStream 626
17.4.4 BufferedInputStream和BufferedOutputStream 629
17.5 示例學習:復制文件 632
17.6 對象I/O 634
17.6.1 Serializable接口 636
17.6.2 序列化數組 637
17.7 隨機訪問文件 638
關鍵術語 642
本章小結 642
測試題 642
編程練習題 642

第18章 遞歸 645
18.1 引言 645
18.2 示例學習:計算階乘 646
18.3 示例學習:計算斐波那契數 649
18.4 使用遞歸解決問題 651
18.5 遞歸輔助方法 653
18.5.1 遞歸選擇排序 654
18.5.2 遞歸二分查找 654
18.6 示例學習:獲取目錄的大小 655
18.7 示例學習:漢諾塔 657
18.8 示例學習:分形 660
18.9 遞歸與迭代 664
18.10 尾遞歸 664
關鍵術語 665
本章小結 665
測試題 666
編程練習題 666

附錄A Java關鍵字和保留字 672
附錄B ASCII字符集 673
附錄C 操作符優先級表 674
附錄D Java修飾符 675
附錄E 特殊浮點值 676
附錄F 數系 677
附錄G 位操作符 681
附錄H 正則表達式 682
附錄I 枚舉類型 688
附錄J 大O、大Ω和大Θ表示法 692