JAVA 程 式 設 計 藝 術 ( 第 九 版 )( 國 際 版 ) JAVA HOW TO PROGRAM 9/E Paul Deitel Harvey Deitel 原 著 陸 茵 楊 安 渡 傅 日 明 編 譯
目 錄 本 書 第 18-25 27-31 章 以 及 附 錄 A-Q 之 內 容, 均 收 錄 於 隨 書 光 碟 中 序 言...xvii 準 備 工 作...xxvii 第 1 章 電 腦 與 Java 簡 介...1-1 1.1 簡 介... 1-2 1.2 電 腦 : 硬 體 與 軟 體... 1-5 1.3 資 料 階 層... 1-6 1.4 電 腦 的 架 構... 1-8 1.5 機 器 語 言 組 合 語 言 與 高 階 語 言... 1-9 1.6 物 件 技 術 簡 介... 1-10 1.7 作 業 系 統... 1-13 1.8 程 式 語 言... 1-15 1.9 Java 與 典 型 的 Java 開 發 環 境... 1-17 1.10 試 用 Java 應 用 程 式... 1-21 1.11 Web 2.0: 社 交 網 路... 1-25 1.12 軟 體 技 術... 1-28 1.13 了 解 最 新 的 資 訊 科 技... 1-30 1.14 總 結... 1-31 第 2 章 Java 應 用 程 式 介 紹...2-1 2.1 簡 介... 2-2 2.2 你 的 第 一 支 Java 程 式 : 列 印 一 行 文 字... 2-2 2.3 修 改 你 的 第 一 支 Java 程 式... 2-9 2.4 使 用 printf 顯 示 文 字... 2-11 2.5 另 一 支 應 用 程 式 : 整 數 加 法... 2-12 2.6 記 憶 體 的 概 念... 2-17 2.7 算 術 運 算... 2-18 2.8 判 斷 : 等 值 運 算 子 與 關 係 運 算 子... 2-21 2.9 總 結... 2-26 第 3 章 類 別 物 件 方 法 及 字 串 的 介 紹...3-1 3.1 簡 介... 3-2 3.2 宣 告 包 含 一 個 方 法 的 類 別, 以 及 實 體 化 類 別 的 物 件... 3-2 3.3 宣 告 帶 有 參 數 的 方 法... 3-6
序言 xxi
xxii JAVA 程式設計藝術(第九版)(國際版) 程式設計小技巧 我們加入了許多程式設計的小技巧 提醒你注意程式開發過程中的重要事項 這 些小技巧與操作習慣 代表了從我們總計七十年的程式設計與教學經驗中 蒐集得來的最佳經驗 良好的程式設計習慣 良好的程式設計習慣 會提醒及幫助你撰寫出清晰易懂 也更易維護的程式的技巧 常見的程式設計錯誤 指出這些 常見的程式錯誤 以減少你犯相同錯誤的可能性 測試和除錯的小技巧 這些小技巧包括從你的程式中偵錯及除錯的建議 許多小技巧描述了 Java 的觀點 能夠從 一開始就避免錯誤進入你的程式中 增進效能的小技巧 這些小技巧會強調出可讓你的程式跑得更快 或是盡可能減少其記憶體用量的機會 可攜性的小技巧 可攜性小技巧能幫助你撰寫出可在多種平台上執行的程式碼 軟體工程的觀點 軟體工程觀點 強調出會影響軟體系統建構的架構與設計議題 特別是針對大規模系統 感視介面的觀點 2.2 感視介面觀點 會強調出圖形使用者介面的設計習慣 這些觀點能幫助你遵照業界的規 範 設計出吸引人 具有親和力的圖形使用者介面 摘要清單 我們在每一章都提供了分小節的摘要清單 自我練習題與解答 我們加入了大量的自我練習題與解答 以供自修之用 所有選讀 ATM 案例研 究中的習題 都有完整的解答 習題 章末的習題包含
Java 應用程式介紹 2 What s in a name? That which we call a rose By any other name would smell as sweet. William Shakespeare When faced with a decision, I always ask, What would be the most fun? Peggy Walker The chief merit of language is clearness. Galen One person can make a difference and every person should try. John F. Kennedy 學習目標 在本章節中 你將會學習到 撰寫簡單的 Java 應用程式 使用輸入與輸出敘述 Java 的基本型別 記憶體的基本概念 使用算術運算子 算術運算子的優先順序 撰寫各種判斷敘述 使用關係運算子與等值運算子
2-2 JAVA 程式設計藝術(第九版)(國際版) 本章綱要 2.1 簡介 2.2 你的第一支 Java 程式 列印一行文字 2.3 修改你的第一支 Java 程式 2.4 使用 printf 顯示文字 2.5 另一支應用程式 整數加法 2.6 記憶體的概念 2.7 算術運算 2.8 判斷 等值運算子與關係運算子 2.9 總結 摘要 自我測驗 自我測驗解答 習題 改造世界 2.1 簡介 本章會介紹如何撰寫 Java 應用程式 一開始 我們會介紹幾個會在螢幕上顯示訊息的範例程式 接下來我們會呈現另一支程式 這支程式會向使用者取得兩個數值 計算此二數之和 然後顯出結 果 你將會學到如何命令電腦執行算術運算 然後儲存結果供後續使用 最後一個範例會示範程式 如何進行判斷 這支應用程式會比較數字 然後顯示訊息 指出比較的結果 本章會使用 JDK 提供的工具來編譯及執行程式 我們也在 www.deitel.com/books/jhtp9 上頭張貼了 Dive Into 影片 以幫助你入手使用廣受歡迎的 Eclipse 與 NetBeans 整合開發環境 2.2 你的第一支 Java 程式 列印一行文字 Java 應用程式 (application) 是一種電腦程式 會在你使用 java 命令啟動 Java 虛擬機器 (JVM) 時開始執行 本節稍後 我們會討論如何編譯及執行 Java 應用程式 首先 我們會考量能 夠顯示一行文字的簡單應用 圖 2.1 印出了這支程式 後頭加上一個方塊顯示其輸出 這支程式包 含行號 我們是為了教學目的加入這些行號 它們不屬於 Java 程式的一部分 這個範例描繪 了幾個重要的 Java 特色 我們會看到 是第 9 行在執行真正的工作 在螢幕上顯示出 Welcome to Java Programming! 這個句子
第2章 圖 2.1 Java 應用程式介紹 2-3 文字列印程式 在程式中加入註解 我們會加入註解來說明程式 以增進程式的可讀性 Java 編譯器會忽略註解 因此程式在執行時 註解並不會令電腦執行任何動作 依照慣例 我們會在每個程式的開頭加上註解 指出其插圖編號以及檔名 第 1 行的註解 以 // 開頭 表示這是一句單行註解 (end-of-line comment) 註解部分會結束在 // 出現的那 行行尾 單行註解不需要從該行的最頭開始 它也可以從行中開始 持續到該行結束 (如第 10 與 第 11 行) 第 2 行 是一個用來描述程式用途的註解 Java 也有傳統註解 (traditional comment) 可以跨越多行 如下 這類註解是以分界符號 /* 和 */ 開始及結束 編譯器會忽略分界符號裡所有的文字 Java 分別 從 C 與 C++ 程式語言 納入了傳統註解與單行註解 本書中只會使用單行註解 Java 還提供第三種註解 Javadoc 註解 Javadoc 註解是以 /** 與 */ 作為分界 編譯器會 忽略分界符號裡面所有的文字 Javadoc 註解讓你能將程式的說明文件直接嵌入到程式中 這也是 業界比較偏好的 Java 文件說明格式 Javadoc 公用程式 (標準版 Java SE Development Kit 的一部 分) 會讀取 Javadoc 註解 然後以 HTML 格式來呈現你的程式的說明文件 我們會在附錄 M 使用 javadoc 建立說明文件 解說 Javadoc 註解以及 Javadoc 公用程式
2-4 JAVA 程式設計藝術(第九版)(國際版) 常見的程式設計錯誤 2.1 遺漏傳統註解或 Javadoc 註解的其中一個分界符號 是一種語法錯誤 當編譯器碰到違反 Java 語言規則 (亦即其語法) 的程式碼 就會產生語法錯誤 (syntax error) 這些規則與自然語言中 規定句型結構的文法規則類似 語法錯誤又稱為編譯器錯誤 (compiler error) 編譯時期錯誤 (compile-time error) 或是編譯錯誤 (compilation error) 因為編譯器會在編譯時期偵測到這些 錯誤 編譯器的回應是發出一個錯誤訊息 並阻止你的程式繼續編譯下去 良好的程式設計習慣 2.1 有些機構要求所有程式都應該以註解開頭 說明程式的目的 作者 日期以及最近修改 的日期 使用空白行 第 3 行是一行空白 空白行 空格字元與定位符號 會讓程式更容易閱讀 三者合稱空白 (white space) 編譯器會忽略空白 良好的程式設計習慣 2.2 請利用空白行與空格來增加程式的可讀性 宣告類別 第 4 行 開始了 Welcome1 類別的類別宣告 (class declaration) 每支 Java 程式都至少要包含一個你 (或程 式 設 計 師 ) 所 定 義 的 類 別 關 鍵 字 class 會 開 始 一 個 類 別 宣 告 後 頭 緊 接 著 類 別 名 稱 (Welcome1) 關鍵字 (有時稱為保留字) 會被保留供 Java 使用 關鍵字永遠以小寫字母拼成 附 錄 C 包含完整的 Java 關鍵字列表 類別名稱與識別字 依照慣例 類別名稱會以大寫字母開頭 名稱中所有用到的單字 第 1 個字母都要大寫 (例如 SampleClassName) 類別名稱是一種識別字 (identifier) 是由一串字母 數字 底線 ( _ ) 以 及錢號 ($) 所構成的字串 不能以數字開頭 也不能包含任何空白 例如 Welcome1 $value _value m_inputfield1 button7 等 都是合法的識別字 7button 這個名稱則不是合法 的識別字 因為它以數字開頭 input field 也不是合法的識別字 因為其中包含一個空格 通 常 不以大寫字母開頭的識別字 就不會是類別的名稱 Java 有大小寫之分 (case sensitive) 也 就是說 大小寫會被視為不同的字母 所以 value 和 Value 是不同的識別字 (但兩者都是合法 的)
第2章 Java 應用程式介紹 2-29 y if 敘述內的條件式是由等值運算子 (== 以及!=) 和關係運算子 (> < >= 以及 <=) 所組成 y if 敘述會以關鍵字 if 開頭 其後跟著一對小括號及其內的條件式 並預期主體中包含一個敘述 y 空白敘述是一個不會執行任何工作的敘述 自我測驗 2.1 請填入下列敘述的空格 a) 每個方法的主體都是以 開始 以 結束 b) 敘述用於判斷 c) 開始單行註解 d) 與 統稱為空白 e) 是保留給 Java 使用 f) Java 應用程式一開始會執行 方法 g) 與 方法會在命令列視窗中顯示訊息 2.2 說明下列何者為真 (true) 何者為偽 (false) 如果答案為偽 請說明理由 a) 程式執行時 註解會讓電腦在螢幕上顯示出 // 後頭的文字 b) 所有變數在宣告時 都必須給予一種型別 c) Java 會將變數 number 和 NuMbEr 視為相同 d) 餘數運算子 (%) 只能用於整數運算元 e) 算術運算子 * / % + - 全都具有相同的優先權層級 2.3 試撰寫敘述來完成下列工作 a) 將變數 c thisisavariable q76354 以及 number 宣告為 int 型別 b) 提示使用者輸入一個整數 c) 輸入一個整數 並將此整數指定給 int 變數 value 假設 Scanner 變數 input 可以用來從鍵 盤讀入數值 d) 於命令列視窗中 在同一行內印出 "This is a Java program" 訊息 請利用 System.out.println 方法 e) 於命令列視窗中 將 "This is a Java program" 訊息印出為兩行 第一行應該以 Java 結束 請利用 System.out.println 方法 f) 於命令列視窗中 將 "This is a Java program" 訊息印出為兩行 第一行應該以 Java 結束 請利用 System.out.printf 方法以及二個 %s 格式描述子 g) 如果變數 number 不等於 7 顯示 "The variable number is not equal to 7 2.4 請找出並更正下列各個敘述中的錯誤
2-30 JAVA 程式設計藝術(第九版)(國際版) 2.5 請撰寫宣告 敘述或註解 來完成下列各項工作 a) 說明一個程式會計算三個整數的乘積 b) 建立一個 Scanner 物件呼叫 input 以從標準輸入裝置讀入數值 c) 將變數 x y z 和 result 宣告為整數型別 int d) 提示使用者輸入第一個整數 e) 讀入使用者輸入的第一個整數 並將之儲存至變數 x f) 提示使用者輸入第二個整數 g) 讀入使用者輸入的第二個整數 並將之儲存至變數 y h) 提示使用者輸入第三個整數 i) 讀入使用者輸入的第三個整數 並將之儲存至變數 z j) 計算三個變數 x y z 所含整數的連乘積 然後將結果指定給變數 result k) 顯示訊息 "Product is" 後頭加上變數 result 的數值 2.6 請使用你在習題 2.5 中所寫的敘述 撰寫一個完整的程式 計算並顯示三個整數的乘積 自我測驗解答 2.1 a) 左括號 ({) 右括號 (}) b) if c) // d) 空格字元 換行 定位 e) 關鍵字 f) main g) System.out.print System.out.println 和 System.out.printf 2.2 a) 偽 註解並不會在程式執行時 造成任何行動 註解主要用於說明程式 以增進程式的可讀性 b) 真 c) 偽 Java 有區分大小寫 所以這些變數是不同的 d) 偽 在 Java 中 餘數運算子也可以使用非整數運算元 e) 偽 運算子 * / 和 % 的優先權高於 + 和 - 2.3 2.4 a) 錯誤 if 中條件式 (c < 7) 的右小括號後面多了分號 更正 將右小括號後頭的分號去掉 [請注意 如果不修改 不論 if 條件式為真或偽 都會執 行該輸出敘述 ] b) 錯誤 關係運算子 => 不正確 更正 將 => 改為 >=