本書是Java語言的經(jīng)典教材,中文版分為基礎篇和進階篇,主要介紹程序設計基礎、面向?qū)ο蟪绦蛟O計、GUI程序設計、數(shù)據(jù)結構和算法、高級Java程序設計等內(nèi)容。本書通過示例講解問題求解技巧,提供大量的程序清單,每章配有豐富的復習題和編程練習題,幫助讀者掌握編程技術,并學會應用所學技術解決實際開發(fā)中遇到的問題;A篇主要介紹基本程序設計、語法結構、面向?qū)ο蟪绦蛟O計、繼承和多態(tài)、異常處理和文本I/O、抽象類和接口等內(nèi)容。本書可作為高等院校計算機相關專業(yè)程序設計課程的教材,也可作為Java語言及編程愛好者的參考資料。
許多讀者就本書之前的版本給出了很多反饋,這些評論和建議極大地改進了本書。這一版在表述、組織、示例、練習題以及附錄方面都有大幅改進。 本書采用基礎優(yōu)先的方法,在設計用戶自定義類之前,首先介紹基本的程序設計概念和技術。選擇語句、循環(huán)、方法和數(shù)組這樣的基本概念與技術是程序設計的基礎,打好這些基礎將幫助學生為進一步學習面向?qū)ο蟪绦蛟O計和高級Java程序設計做好準備。
本書以問題驅(qū)動的方式來教授程序設計,將重點放在問題的解決而不是語法上。我們通過使用在各種應用場景中引發(fā)思考的問題,使程序設計的介紹變得更加有趣。前面章節(jié)的主線放在問題的解決上,引入合適的語法和庫以支持編寫解決問題的程序。為了支持以問題驅(qū)動的方式來教授程序設計,本書提供了大量不同難度的問題來激發(fā)學生的積極性。為了吸引各個專業(yè)的學生來學習,這些問題涵蓋很多應用領域,包括數(shù)學、科學、商業(yè)、金融、游戲、動畫以及多媒體等。 本書將程序設計、數(shù)據(jù)結構和算法無縫整合在一起,采用一種實用的方式來教授數(shù)據(jù)結構。首先介紹如何使用各種數(shù)據(jù)結構來開發(fā)高效的算法,然后演示如何實現(xiàn)這些數(shù)據(jù)結構。通過實現(xiàn),學生可以深入理解數(shù)據(jù)結構的效率,以及如何和何時使用某種數(shù)據(jù)結構。最后,我們設計和實現(xiàn)了針對樹和圖的用戶自定義數(shù)據(jù)結構。 本書廣泛應用于全球眾多大學的程序設計入門、數(shù)據(jù)結構和算法課程中。完全版包括程序設計基礎、面向?qū)ο蟪绦蛟O計、GUI程序設計、數(shù)據(jù)結構、算法、并行、網(wǎng)絡、數(shù)據(jù)庫和Web程序設計。這個版本旨在把學生培養(yǎng)成精通Java的程序員;A篇包含完全版的前18章內(nèi)容,可用于程序設計的第一門課程(通常稱為CS1)。
本書還有一個AP版本,適合學習AP計算機科學(AP Computer Science)課程的高中生使用。 教授編程的最好途徑是通過示例,而學習編程的唯一途徑是通過動手練習。本書通過示例對基本概念進行講解,并提供大量不同難度的練習題供學生進行練習。在我們的程序設計課程中,每次課后都布置了編程練習。 我們的目標是編寫一本可以通過各種應用場景中的有趣示例來教授問題求解和程序設計的教材。如果你有任何關于如何改進本書的意見或建議,請給我發(fā)郵件。 ACM/IEEE課程體系2013版和ABET課程評價 新的ACM/IEEE計算機科學課程體系2013版將知識體系組織成18個知識領域。為了幫助教師基于本書設計課程,我們提供了示例教學大綱來確定知識領域和知識單元。
作為一個常規(guī)的定制示例,示例教學大綱用于三學期的課程系列。示例教學大綱可以從教師資源配套網(wǎng)站獲取。 許多讀者來自ABET認證計劃。ABET認證的一個關鍵組成部分是,通過針對課程效果的持續(xù)課程評價確定學習中的薄弱環(huán)節(jié)。我們在教師資源配套網(wǎng)站中提供了課程效果示例,以及用于檢驗課程效果的示例考試。 本版新增內(nèi)容 本版對各個細節(jié)都進行了全面修訂,以更清晰地呈現(xiàn)知識、示例和練習題。本版的主要改進如下: 更新至Java 9、10和11。使用Java 9、10和11版本中的新特征對示例進行了改進和簡化。 GUI相關章節(jié)更新到JavaFX 11,并改寫了示例。示例和練習題中的用戶界面現(xiàn)在可以改變尺寸并且居中顯示。 數(shù)據(jù)結構相關章節(jié)中,更多的示例和練習題采用lambda表達式來簡化編程。 Comparable和Comparator都被用于比較Heap、PriorityQueue、BST以及AVLTree中的元素。這樣與Java API保持一致,更加實用、靈活。 第22章引入了字符串匹配算法。 添加了視頻注解。 提供了沒有出現(xiàn)在書中的額外習題,這些習題僅供教師使用。 可以訪問本書配套網(wǎng)站www.pearsonhighered.com/liang,了解這一版與前一版的關聯(lián)以及全部的新特征。
教學特色 本書使用以下要素組織素材,以幫助讀者高效學習: 教學目標:在每章開始列出學生應該掌握的內(nèi)容,學完這章后,學生能夠判斷自己是否達到這些目標。 引言:提出引發(fā)思考的問題以展開討論,激發(fā)讀者深入探討相關內(nèi)容。 要點提示:突出每節(jié)中涵蓋的重要概念。 復習題:幫助學生復習每節(jié)相關內(nèi)容并評估掌握的程度。 問題和示例學習:通過精心挑選示例,以易于理解的方式教授問題求解和程序設計概念。本書使用多個短小的、簡單的、激發(fā)興趣的例子來演示重要的概念。 本章小結:回顧學生應該理解和記住的重要主題,有助于鞏固所學的關鍵概念。 測試題:可以在線訪問,按章節(jié)組織,讓學生可以就編程概念和技術進行自我測試。 編程練習題:按章節(jié)組織,為學生提供自主應用所學新技能的機會。練習題的難度分為容易(沒有星號)、適度(*)、難(**)和具有挑戰(zhàn)性(***)四個級別。學習程序設計的竅門就是實踐、實踐、再實踐。所以,本書提供了大量的編程練習題。教師資源網(wǎng)站還為教師提供了額外的200多道帶有答案的編程練習題。 注意、提示、警告和設計指南:貫穿全書,對程序開發(fā)的重要方面提供有價值的建議和見解。 注意:提供學習主題的附加信息,鞏固重要概念。 提示:教授良好的程序設計風格和實踐經(jīng)驗。
作者簡介 梁勇(Y. Daniel Liang) 現(xiàn)為阿姆斯特朗亞特蘭大州立大學計算機科學系教授。之前曾是普渡大學計算機科學系副教授,并兩次獲得普渡大學杰出研究獎。他所編寫的Java教程在美國大學Java課程中采用率極高,同時他還兼任Prentice Hall Java系列叢書的編輯。他是“Java Champion”榮譽得主,并在世界各地為在校學生和程序員做Java程序設計方法及技術方面的講座。
譯者簡介 戴開宇 復旦大學軟件學院教師,工程碩士導師,中國計算機學會會員。博士畢業(yè)于上海交通大學計算機應用專業(yè),2011~2012年在美國佛羅里達大學作訪問學者。承擔多門本科專業(yè)課程、通識教育課程以及工程碩士課程,這些課程被評為校精品課程、上海市重點建設課程、IBM-教育部精品課程等。
出版者的話
中文版序
譯者序
前言
第1章 計算機、程序和Java概述 1 1.1 引言 1 1.2 什么是計算機 2 1.2.1 中央處理器 2 1.2.2 比特和字節(jié) 3 1.2.3 內(nèi)存 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 操作系統(tǒng) 8 1.4.1 控制和監(jiān)視系統(tǒng)活動 8 1.4.2 分配和調(diào)配系統(tǒng)資源 9 1.4.3 調(diào)度操作 9 1.5 Java的特性和應用 9 1.6 Java語言規(guī)范、API、JDK、JRE和IDE 10 1.7 一個簡單的Java程序 11 1.8 創(chuàng)建、編譯和執(zhí)行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開發(fā)Java程序 20 1.11.1 創(chuàng)建Java項目 21 1.11.2 創(chuàng)建Java類 22 1.11.3 編譯和運行類 22 1.12 使用Eclipse開發(fā)Java程序 23 1.12.1 創(chuàng)建Java項目 23 1.12.2 創(chuàng)建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 數(shù)值數(shù)據(jù)類型和操作 39 2.9.1 從鍵盤讀取數(shù)值 40 2.9.2 數(shù)值操作符 41 2.9.3 指數(shù)運算 42 2.10 數(shù)值型字面值 43 2.10.1 整型字面值 43 2.10.2 浮點型字面值 43 2.10.3 科學記數(shù)法 44 2.11 JShell 44 2.12 表達式求值和操作符優(yōu)先級 46 2.13 示例學習:顯示當前時間 48 2.14 增強賦值操作符 49 2.15 自增和自減操作符 50 2.16 數(shù)值類型轉(zhuǎn)換 52 2.17 軟件開發(fā)過程 54 2.18 示例學習:計算貨幣單位 58 2.19 常見錯誤和陷阱 60 關鍵術語 62 本章小結 62 測試題 63 編程練習題 63
第3章 選擇 68 3.1 引言 68 3.2 boolean數(shù)據(jù)類型、值和表達式 68 3.3 if語句 70 3.4 雙分支if-else語句 72 3.5 嵌套的if語句和多分支if-else語句 73 3.6 常見錯誤和陷阱 75 3.7 產(chǎn)生隨機數(shù) 79 3.8 示例學習:計算體重指數(shù) 80 3.9 示例學習:計算稅率 82 3.10 邏輯操作符 84 3.11 示例學習:判斷閏年 88 3.12 示例學習:彩票 89 3.13 switch語句 90 3.14 條件操作符 93 3.15 操作符的優(yōu)先級和結合規(guī)則 95 3.16 調(diào)試 96 關鍵術語 96 本章小結 97 測試題 97 編程練習題 97
第4章 數(shù)學函數(shù)、字符和字符串 106 4.1 引言 106 4.2 常用數(shù)學函數(shù) 107 4.2.1 三角函數(shù)方法 107 4.2.2 指數(shù)函數(shù)方法 107 4.2.3 舍入方法 108 4.2.4 min、max和abs方法 108 4.2.5 random方法 109 4.2.6 示例學習:計算三角形的角度 109 4.3 字符數(shù)據(jù)類型和操作 111 4.3.1 Unicode和ASCII碼 111 4.3.2 特殊字符的轉(zhuǎn)義序列 112 4.3.3 字符型數(shù)據(jù)與數(shù)值型數(shù)據(jù)之間的類型轉(zhuǎn)換 113 4.3.4 比較和測試字符 114 4.4 String類型 115 4.4.1 獲取字符串長度 116 4.4.2 從字符串中獲取字符 116 4.4.3 連接字符串 117 4.4.4 轉(zhuǎn)換字符串 118 4.4.5 從控制臺讀取字符串 118 4.4.6 從控制臺讀取字符 119 4.4.7 字符串比較 119 4.4.8 獲得子字符串 121 4.4.9 查找字符串中的字符或者子串 121 4.4.10 字符串和數(shù)值間的轉(zhuǎn)換 122 4.5 示例學習 124 4.5.1 猜測生日 124 4.5.2 將十六進制數(shù)轉(zhuǎn)換為十進制數(shù) 127 4.5.3 使用字符串修改彩票程序 129 4.6 格式化控制臺輸出 130 關鍵術語 134 本章小結 134 測試題 134 編程練習題 134
第5章 循環(huán) 140 5.1 引言 140 5.2 while循環(huán) 141 5.3 示例學習:猜數(shù)字 143 5.4 循環(huán)設計策略 146 5.5 使用用戶確認或標記值控制循環(huán) 148 5.6 do-while循環(huán) 151 5.7 for循環(huán) 153 5.8 采用哪種循環(huán) 156 5.9 嵌套循環(huán) 158 5.10 最小化數(shù)值錯誤 160 5.11 示例學習 161 5.11.1 求最大公約數(shù) 161 5.11.2 預測未來學費 163 5.11.3 將十進制數(shù)轉(zhuǎn)換為十六進制數(shù) 163 5.12 關鍵字break和continue 165 5.13 示例學習:判斷回文 168 5.14 示例學習:顯示素數(shù) 170