本書是一本Java 編程方面的優(yōu)秀教材,秉承Deitel系列叢書的一貫特點:內容豐富、覆蓋面廣,提供詳細代碼與實例研究,總結出大量的面向對象編程技巧和經驗。本書詳細說明了在Java 中面向對象編程的基本理論及實用知識,以初學者為起點,由點到面、由淺入深、循序漸進地介紹了對象、繼承、多態(tài)、接口、異常處理、JavaFX GUI、數據結構和集合、lambda與流、遞歸、搜索與排序、并發(fā)性、JDBC、JavaFX與多媒體、JShell 等,并且詳細介紹了網絡應用的開發(fā)與實踐。第十一版在前一版的基礎上增加了更多的實際案例,更新了很多內容,有助于讀者學習和借鑒。本書包括更廣泛的教學特性,其中列舉了數百個可實際使用的程序,并給出了運行結果,可以使學生在學習時更為直觀。
Paul Deitel,Deitel & Associates公司CEO兼CTO,具有超過35年計算機行業(yè)的工作經驗,畢業(yè)于麻省理工學院。他擁有Java Certified Programmer和Java Certified Developer認證證書,并且被授予Oracle Java Champion稱號。通過Deitel & Associates公司,他向行業(yè)客戶提供了數以百計的編程課程,這些客戶包括:Cisco,IBM, Siemens,Sun Microsystems(現在屬于Oracle),Dell,Fidelity,NASA肯尼迪航天中心,美國國家風暴實驗室,白沙導彈基地,Rogue Wave Software,Boeing,SunGard Higher Education,Nortel Networks,Puma,iRobot,Invensys,等等。他和合作者Harvey Deitel博士,是全球暢銷的編程語言教材和專業(yè)圖書/視頻產品的作者。Harvey Deitel博士,Deitel & Associates公司主席兼首席戰(zhàn)略官,具有55年以上的計算機行業(yè)工作經驗。Deitel博士在麻省理工學院獲得電子工程學士和碩士學位,在波士頓大學獲得數學博士學位——在將計算機科學專業(yè)從這些專業(yè)分離出去之前,Deitel博士已經學習過計算機知識。他具有豐富的大學教學經驗,在與兒子Paul于1991年創(chuàng)立Deitel & Associates公司之前,Deitel博士是波士頓大學計算機科學系主任并獲得了終身教職。他們的出版物已經贏得了國際聲譽,并被翻譯成了日文、德文、俄文、西班牙文、法文、波蘭文、意大利文、簡體中文、繁體中文、韓文、葡萄牙文、希臘文、烏爾都文和土耳其文。Deitel博士為許多大公司、學術機構、政府部門和軍隊提供了數百場的專業(yè)編程培訓。
張永健,國際關系學院副教授,畢業(yè)于北京郵電大學,專業(yè)為通信、計算機,目前從事網絡及信息安全、移動互聯網安全技術、大數據及多媒體安全等研究方向,并教授計算機安全等相關課程。
目 錄
第1章 計算機、Internet與Java簡介 1
1.1 簡介 2
1.2 硬件和軟件 3
1.3 數據層次 4
1.4 機器語言、匯編語言和高級語言 6
1.5 對象技術介紹 7
1.6 操作系統 9
1.7 編程語言 11
1.8 Java 12
1.9 典型的Java開發(fā)環(huán)境 12
1.10 測試驅動的Java應用 15
1.11 Internet和WWW 17
1.12 軟件技術 19
1.13 Java問題解答 20
自測題 20
自測題答案 21
練習題 21
挑戰(zhàn)題 22
第2章 Java應用介紹、輸入/輸出、運算符 23
2.1 簡介 23
2.2 第一個Java程序:輸出一行文本 24
2.3 修改第一個Java程序 28
2.4 使用printf顯示文本 29
2.5 另一個Java程序:整數相加 30
2.6 內存概念 33
2.7 算術運算 34
2.8 判斷:相等性和關系運算符 36
2.9 小結 39
總結 39
自測題 41
自測題答案 42
練習題 44
挑戰(zhàn)題 47
第3章 類、對象、方法與String簡介 48
3.1 簡介 48
3.2 實例變量、set方法和get方法 49
3.3 Account類:使用構造方法初始化對象 56
3.4 包含浮點數余額的Account類 58
3.5 基本類型與引用類型的比較 61
3.6 (選修)GUI與圖形實例:一個簡單的GUI 62
3.7 小結 67
總結 67
自測題 70
自測題答案 71
練習題 71
挑戰(zhàn)題 72
第4章 控制語句(1)及賦值、++與- -運算符 73
4.1 簡介 73
4.2 算法 74
4.3 偽代碼 74
4.4 控制結構 74
4.5 if單選擇語句 76
4.6 if...else雙選擇語句 77
4.7 Student類:嵌套if...else語句 79
4.8 while循環(huán)語句 81
4.9 形成算法:計數器控制循環(huán) 82
4.10 形成算法:標記控制循環(huán) 85
4.11 形成算法:嵌套控制語句 90
4.12 復合賦值運算符 93
4.13 增量運算符和減量運算符 94
4.14 基本類型 96
4.15 (選修)GUI與圖形實例:事件處理、畫線 96
4.16 小結 104
總結 104
自測題 107
自測題答案 108
練習題 109
挑戰(zhàn)題 113
第5章 控制語句(2)及邏輯運算符 115
5.1 簡介 115
5.2 計數器控制循環(huán)的實質 116
5.3 for循環(huán)語句 116
5.4 使用for語句的示例 119
5.5 do...while循環(huán)語句 122
5.6 switch多選擇語句 123
5.7 AutoPolicy類實例:switch語句中的字符串 127
5.8 break和continue語句 130
5.9 邏輯運算符 131
5.10 結構化編程小結 135
5.11 (選修)GUI與圖形實例:繪制矩形和橢圓 138
5.12 小結 141
總結 141
自測題 143
自測題答案 144
練習題 145
挑戰(zhàn)題 148
第6章 方法:深入探究 149
6.1 簡介 149
6.2 Java中的程序單元 150
6.3 靜態(tài)方法、靜態(tài)字段和Math類 151
6.4 聲明多參數方法 152
6.5 關于聲明與使用方法的說明 155
6.6 方法調用棧與活動記錄 156
6.7 實參提升與強制轉換 157
6.8 Java API包 158
6.9 案例分析:安全的隨機數生成方法 159
6.10 案例分析:機會游戲與enum類型 162
6.11 聲明的作用域 165
6.12 方法重載 167
6.13 (選修)GUI與圖形實例:顏色和填充圖形 169
6.14 小結 171
總結 171
自測題 174
自測題答案 175
練習題 176
挑戰(zhàn)題 180
第7章 數組與ArrayList 181
7.1 簡介 182
7.2 數組 182
7.3 聲明和創(chuàng)建數組 183
7.4 數組使用舉例 184
7.5 異常處理:處理不正確的反饋值 190
7.6 案例分析:模擬洗牌和發(fā)牌 191
7.7 增強型for語句 194
7.8 將數組傳入方法 195
7.9 按值傳遞與按引用傳遞 196
7.10 案例分析:GradeBook類用數組保存成績 197
7.11 多維數組 201
7.12 案例分析:使用二維數組的GradeBook類 203
7.13 變長實參表 207
7.14 使用命令行實參 208
7.15 Arrays類 210
7.16 集合和ArrayList類簡介 212
7.17 (選修)GUI與圖形實例:畫圓弧 214
7.18 小結 216
總結 216
自測題 219
自測題答案 219
練習題 220
拓展內容:建立自己的計算機 227
挑戰(zhàn)題 231
第8章 類與對象:深入探究 233
8.1 簡介 233
8.2 Time類案例分析 234
8.3 對成員的訪問控制 237
8.4 用this引用訪問當前對象的成員 237
8.5 Time類案例分析:重載構造方法 239
8.6 默認構造方法與無實參構造方法 243
8.7 set方法和get方法 243
8.8 組合 244
8.9 enum類型 246
8.10 垃圾回收 248
8.11 靜態(tài)類成員 249
8.12 靜態(tài)導入 251
8.13 final實例變量 252
8.14 包訪問 253
8.15 將BigDecimal用于精確的貨幣計算 254
8.16 (選修)GUI與圖形實例:使用包含圖形的對象 255
8.17 小結 258
總結 258
自測題 261
自測題答案 261
練習題 261
挑戰(zhàn)題 264
第9章 面向對象編程:繼承 265
9.1 簡介 265
9.2 超類與子類 266
9.3 protected成員 267
9.4 超類與子類的關系 268
9.5 子類的構造方法 282
9.6 Object類 283
9.7 比較組合和繼承的差異 283
9.8 小結 285
總結 285
自測題 286
自測題答案 286
練習題 286
第10章 面向對象編程:多態(tài)和接口 289
10.1 簡介 289
10.2 多態(tài)示例 290
10.3 演示多態(tài)行為 291
10.4 抽象類和抽象方法 293
10.5 案例分析:使用多態(tài)的工資系統 295
10.6 超類和子類變量之間允許的賦值 305
10.7 final方法和final類 305
10.8 分析從構造方法調用方法時的問題 306
10.9 創(chuàng)建和使用接口 306
10.10 Java SE 8的接口強化 312
10.11 Java SE 9的私有接口方法 313
10.12 私有構造方法 314
10.13 使用接口繼承而非實現繼承 314
10.14 (選修)GUI與圖形實例:利用多態(tài)性畫圖 316
10.15 小結 317
總結 318
自測題 320
自測題答案 321
練習題 321
挑戰(zhàn)題 322
第11章 異常處理:深入探究 323
11.1 簡介 323
11.2 示例:除數為0時沒有處理異常 324
11.3 示例:處理ArithmeticException異常和InputMismatchException 異常 326
11.4 何時使用異常處理 330
11.5 Java異常層次 330
11.6 finally語句塊 332
11.7 棧解退和從異常獲得信息 336
11.8 鏈式異常 338
11.9 聲明新的異常類型 339
11.10 前置條件和后置條件 340
11.11 斷言 340
11.12 try-with-resources:自動釋放資源 341
11.13 小結 342
總結 343
自測題 345
自測題答案 345
練習題 346
第12章 JavaFX GUI(1) 347
12.1 簡介 347
12.2 JavaFX Scene Builder 348
12.3 JavaFX程序窗口的結構 349
12.4 Welcome程序——顯示文本和圖像 350
12.5 Tip Calculator程序——事件處理 353
12.6 后續(xù)有關JavaFX章節(jié)中的主題 365
12.7 小結 365
總結 366
自測題 369
自測題答案 370
練習題 370
挑戰(zhàn)題 370
第13章 JavaFX GUI(2) 372
13.1 簡介 372
13.2 在場景圖中布局節(jié)點 373
13.3 Painter程序:RadioButton、鼠標事件和形體 374
13.4 Color Chooser程序:屬性綁定和屬性監(jiān)聽器 381
13.5 Cover Viewer程序:數據驅動的GUI及JavaFX集合 386
13.6 Cover Viewer程序:定制ListView單元格 389
13.7 其他JavaFX功能 392
13.8 JavaFX 9:Java SE 9 JavaFX的更新 394
13.9 小結 395
總結 395
自測題 400
自測題答案 401
練習題 401
第14章 字符串、字符與正則表達式 402
14.1 簡介 402
14.2 字符和字符串基礎 403
14.3 String類 403
14.4 StringBuilder類 413
14.5 Character類 418
14.6 標記化String 421
14.7 正則表達式及Pattern類和Matcher類 422
14.8 小結 427
總結 428
自測題 430
自測題答案 431
練習題 431
拓展內容:字符串操作練習題 432
拓展內容:處理字符串的挑戰(zhàn)項目 434
挑戰(zhàn)題 435
第15章 文件、輸入/輸出流、NIO與XML序列化 436
15.1 簡介 436
15.2 文件和流 437
15.3 使用NIO類和接口來獲得文件和目錄信息 438
15.4 順序文本文件 440
15.5 XML序列化 447
15.6 FileChooser和DirectoryChooser對話框 452
15.7 (選修)其他的java.io類 456
15.8 小結 458
總結 458
自測題 461
自測題答案 462
練習題 462
挑戰(zhàn)題 464
第16章 泛型集合 465
16.1 簡介 465
16.2 集合概述 466
16.3 類型包裝器類 467
16.4 自動裝箱和自動拆箱 467
16.5 Collection接口和Collections類 467
16.6 List 468
16.7 Collections方法 473
16.8 PriorityQueue類和Queue接口 481
16.9 Set 482
16.10 Map 484
16.11 同步集合 487
16.12 不可修改集合 487
16.13 抽象實現 488
16.14 Java SE 9:用于不可變集合的便利工廠方法 488
16.15 小結 490
總結 491
自測題 493
自測題答案 493
練習題 494
第17章 lambda與流 496
17.1 簡介 497
17.2 流和聚合 498
17.3 映射和lambda 500
17.4 過濾 503
17.5 元素如何在流管道中移動 504
17.6 方法引用 505
17.7 IntStream操作 507
17.8 函數式接口 510
17.9 lambda:深入探究 511
17.10 Stream<Integer>操作 512
17.11 Stream<String>操作 515
17.12 Stream<Employee>操作 516
17.13 根據文件創(chuàng)建Stream<String> 524
17.14 隨機值流 526
17.15 無限流 528
17.16 lambda事件處理器 529
17.17 關于Java SE 8接口的更多說明 529
17.18 小結 530
總結 530
自測題 536
自測題答案 537
練習題 538
第18章 遞歸 541
18.1 簡介 541
18.2 遞歸概念 542
18.3 使用遞歸示例:階乘 542
18.4 利用BigInteger重新實現FactorialCalculator類 544
18.5 使用遞歸示例:Fibonacci序列 545
18.6 遞歸與方法調用棧 547
18.7 遞歸與迭代的比較 548
18.8 漢諾塔 550
18.9 分形 551
18.10 遞歸回溯 559
18.11 小結 559
總結 560
自測題 561
自測題答案 562
練習題 562
第19章 搜索、排序與大O記法 566
19.1 簡介 566
19.2 線性搜索 567
19.3 大O記法 569
19.4 二分搜索 570
19.5 排序算法 573
19.6 選擇排序 574
19.7 插入排序 576
19.8 合并排序 578
19.9 本章的搜索和排序算法的效率小結 582
19.10 大規(guī)模并行處理與并行算法 583
19.11 小結 583
總結 583
自測題 585
自測題答案 585
練習題 585
挑戰(zhàn)題 587
第20章 泛型類和泛型方法:深入探究 588
20.1 簡介 588
20.2 泛型方法的由來 588
20.3 泛型方法:實現及編譯時翻譯 590
20.4 其他編譯時翻譯問題:將類型參數用作返回類型的方法 592
20.5 重載泛型方法 594
20.6 泛型類 595
20.7 接收類型參數的方法中的通配符 599
20.8 小結 602
總結 602
自測題 604
自測題答案 604
練習題 604
第21章 定制泛型數據結構 606
21.1 簡介 606
21.2 自引用類 607
21.3 動態(tài)內存分配 607
21.4 鏈表 608
21.5 棧 617
21.6 隊列 620
21.7 樹 621
21.8 小結 626
總結 626
自測題 628
自測題答案 629
練習題 629
拓展內容:建立自己的編譯器 634
第22章 JavaFX圖形與多媒體 644
22.1 簡介 644
22.2 利用CSS控制字體 645
22.3 顯示二維形體 650
22.4 Polyline、Polygon和Path 654
22.5 變換 658
22.6 利用Media、MediaPlayer和MediaViewer播放視頻 659
22.7 Transition動畫 664
22.8 Timeline動畫 668
22.9 利用AnimationTimer實現逐幀動畫 670
22.10 在Canvas上繪圖 671
22.11 三維形體 675
22.12 小結 678
總結 678
自測題 683
自測題答案 684
練習題 684
第23章 并發(fā)性 691
23.1 簡介 691
23.2 線程狀態(tài)與生命周期 693
23.3 用Executor框架創(chuàng)建并執(zhí)行線程 695
23.4 線程同步 698
23.5 沒有同步的生產者/消費者關系 704
23.6 生產者/消費者關系:ArrayBlockingQueue 710
23.7 (進階)具有synchronized、wait、notify及notifyAll的生產者/消費者關系 712
23.8 (進階)生產者/消費者關系:有界緩沖區(qū) 716
23.9 (進階)生產者/消費者關系:Lock接口和Condition接口 722
23.10 并發(fā)集合 727
23.11 JavaFX中的多線程 728
23.12 利用Java SE 8的日期/時間API為sort/parallelSort計時 737
23.13 Java SE 8:串行流與并行流 739
23.14 (進階)Callable接口和Future接口 740
23.15 (進階)Fork/Join框架 744
23.16 小結 744
總結 745
自測題 750
自測題答案 751
練習題 752
第24章 利用JDBC訪問數據庫 754
24.1 簡介 755
24.2 關系數據庫 755
24.3 books數據庫 756
24.4 SQL 759
24.5 設置Java DB數據庫 764
24.6 連接并查詢數據庫 766
24.7 查詢books數據庫 769
24.8 RowSet接口 778
24.9 PreparedStatement 780
24.10 存儲過程 788
24.11 事務處理 789
24.12 小結 789
總結 790
自測題 794
自測題答案 794
練習題 794
第25章 JShell簡介:Java SE 9中用于交互式Java的REPL 797
25.1 簡介 798
25.2 安裝JDK 9 799
25.3 JShell簡介 799
25.4 JShell中的命令行輸入 807
25.5 聲明并使用類 808
25.6 JShell的自動補全功能 811
25.7 探索類成員并查看文檔 812
25.8 聲明方法 817
25.9 異常處理 818
25.10 導入類并將包添加到CLASSPATH 819
25.11 使用外部編輯器 820
25.12 JShell命令匯總 822
25.13 代碼段編輯的快捷鍵 826
25.14 JShell如何重新解釋Java以供交互使用 827
25.15 IDE JShell支持 827
25.16 小結 827
自測題 828
自測題答案 830
在線章節(jié) 840
附錄A 運算符優(yōu)先級表 841
附錄B ASCII字符集 843
附錄C 關鍵字和保留字 844
附錄D 基本類型 845
附錄E 使用調試器 846
在線附錄 856
索引 857