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