Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Java SE 7 技術手冊 - 課後練習解答

5,981 views

Published on

Java SE 7 技術手冊

Published in: Technology
  • Be the first to comment

Java SE 7 技術手冊 - 課後練習解答

  1. 1. 1 第 1 章課後練習 課後練習  選擇題 1. 哪個組織負責監督審察 Java 相關技術規格的演進? (A) JCP (B) Apache (C) EU (D) W3C 答案:A 2. Java 技術規格必須以何種正式文件提交審察? (A) RFC (B) JSR (C) ISO (D) IEEE 答案:B 3. Java 的原始碼副檔名為何?編譯完後是哪個副檔名? (A) *.txt、*.java (B) *.c、*.class (C) *.java、*.class (D) *.cpp、*.java 答案:C 4. 對 JVM 來說,可執行檔案的副檔名為何? (A) *.java (B) *.class (C) *.dll (D) *.pyc 答案:B 5. 在 Java 下載頁面中,可看到 JRE 下載選項,這是哪種 JRE? (A) Web JRE
  2. 2. 2 (B) Private JRE (C) Server JRE (D) Public JRE 答案:D 6. 在 Java 下載頁面中,哪個下載選項安裝後,會有 javac 編譯器可以使用? (A) JDK (B) JRE (C) JavaDoc (D) NetBeans 答案:A 7. 如果只是要運行 Java 程式,下載程式哪個安裝即可? (A) JDK (B) JRE (C) JavaDoc (D) NetBeans 答案:B 8. Java 根據應用領域不同,區分為哪三大平台? (A) Java SE (B) Java EE (C) Java ME (D) Android 答案:A、B、C 提示:Android 並非 Java ME 規範,Android 只是在開發時,可以使用 Java 語 法,實際上編譯出來的東西,並非執行在 JVM 上。 9. 哪些平台不在 Java 規範之中? (A) Java ME (B) Android (C) iOS (D) AVI 答案:B、C、D 提示:分別是 Google、Apple 與 Nokia 主導的行動裝置平台。 10. 以下哪些包括在 JRE 之中? (A) 開發工具程式
  3. 3. 3 (B) Java SE API (C) JVM (D) 部署技術 答案:B、C、D
  4. 4. 4 第 2 章課後練習  選擇題 1. 如果在 hello.java 中撰寫以下的程式碼: public class Hello { public static void main(String[] args) { System.out.println("Hello World"); } } 以下描述何者正確? (A) 執行時顯示 Hello World (B) 執行時出現 NoClassDefFoundError (C) 執行時出現出現找不到主要方法的錯誤 (D) 編譯失敗 答案:D 提示:檔名必須是 Hello.java。 2. 如果在 Main.java 中撰寫以下的程式碼: public class Main { public static main(String[] args) { System.out.println("Hello World"); } } 以下描述何者正確? (A) 執行時顯示 Hello World (B) 執行時出現 NoClassDefFoundError (C) 執行時出現找不到主要方法的錯誤 (D) 編譯失敗 答案:D 提示:main()方法定義語法有誤,沒有撰寫 void。 3. 如果在 Main.java 中撰寫以下的程式碼: public class Main { public static void main() { System.out.println("Hello World"); }
  5. 5. 5 } 以下描述何者正確? (A) 執行時顯示 Hello World (B) 執行時出現 NoClassDefFoundError (C) 執行時出現出現找不到主要方法的錯誤 (D) 編譯失敗 答案:C 提示:main()方法定義有誤,沒有撰寫 String[] args 參數。 4. 如果在 Main.java 中撰寫以下的程式碼: public class Main { public static void main(string[] args) { System.out.println("Hello World"); } } 以下描述何者正確? (A) 執行時顯示 Hello World (B) 執行時出現 NoClassDefFoundError (C) 執行時出現出現找不到主要方法的錯誤 (D) 編譯失敗 答案:D 提示:main()方法中的參數有誤,必須是 String 而不是 string。 5. 如果 C:workspaceHelloclasses 中有以下原始碼編譯而成的 Main.class: public class Main { public static void main(String[] args) { System.out.println("Hello World"); } } 文字模式下你的工作路徑是 C:workspace,那麼如何執行 Main 類別? (A) java C:workspaceHelloclassesMain (B) java Helloclasses Main (C) java –cp Helloclasses Main (D) 以上皆非 答案:C 6. 如果 C:workspaceHelloclasses 中有以下原始碼編譯而成的 Main.class: package cc.openhome;
  6. 6. 6 public class Main { public static void main(String[] args) { System.out.println("Hello World"); } } 文字模式下你的工作路徑是 C:workspace,那麼如何執行 Main 類別? (A) java C:workspaceHelloclassesMain (B) java Helloclasses Main (C) java –cp Helloclasses Main (D) 以上皆非 答案:D 提示:Main.class 必須放在 C:workspaceHelloclassesccopenhome 資料夾 中,執行時必須指定 java –cp Helloclasses cc.openhome.Main。 7. 如果有個 Console 類別的原始碼開頭定義如下: package cc.openhome; public class Console { ... } 其完全吻合名稱為何? (A) cc.openhome.Console (B) package.cc.openhome.Console (C) cc.openhome.class.Console (D) 以上皆非 答案:A 8. 如果 C:workspaceHellosrc 中有 Main.java 如下: package cc.openhome; public class Main { public static void main(String[] args) { System.out.println("Hello World"); } } 文字模式下你的工作路徑是 C:workspaceHello,那麼如何編譯與執行 Main 類別? (A) javac srcMain.java java C:workspaceHelloclassesMain (B) javac –d classes srcMain.java
  7. 7. 7 java –cp classes Main (C) javac –d classes srcMain.java java –cp classes cc.openhome.Main (D) javac –d classes srcMain.java java –cp classes/cc/openhome Main 答案:C 9. 如果有個 Console 類別的原始碼開頭定義如下: package cc.openhome; public class Console { ... } 如何在另一個類別中撰寫 import? (A) import cc.openhome.Console; (B) import cc.openhome; (C) import cc.openhome.*; (D) import Console; 答案:A、C 10. 關於套件以下何者正確? (A) 要 使 用 Java SE API 的 System 類 別 必 須 import java.lang.System; (B) 在程式中撰寫 import java.lang.System;會發生編譯錯誤, 因為 java.lang 中的類別不用 import (C) import 並不影響執行效能 (D) 程式中撰寫了 import cc.openhome.Main,執行 java 指令時 只要下 java Main 就可以了 答案:C
  8. 8. 8 第 3 章課後練習 課後練習  選擇題 1. 如果有以下的程式碼: int number; System.out.println(number); 以下描述何者正確? (A) 執行時顯示 0 (B) 執行時顯示隨機數字 (C) 執行時出現錯誤 (D) 編譯失敗 答案:D 提示:number 沒有初始化。 2. 如果有以下的程式碼: System.out.println(10 / 3); 以下描述何者正確? (A) 執行時顯示 3 (B) 執行時顯示 3.33333... (C) 執行時出現錯誤 (D) 編譯失敗 答案:A 提示:10 與 3 都在 int 空間中運算。 3. 如果有以下的程式碼: float radius = 88.2; double area = 2 * 3.14 * radius * radius; System.out.println(area); 以下描述何者正確? (A) 執行時顯示 48853.6272 (B) 執行時顯示 48853 (C) 執行時出現錯誤 (D) 編譯失敗 答案:D
  9. 9. 9 提示:3.14 是 double 型態。 4. 如果有以下的程式碼: byte a = 100; byte b = 200; byte c = (byte) (a + b); System.out.println(c); 以下描述何者正確? (A) 執行時顯示 300 (B) 執行時顯示 127 (C) 執行時出現錯誤 (D) 編譯失敗 答案:D 提示:200 超過了 byte 可以儲存的範圍。 5. 如果有以下的程式碼: System.out.println(Integer.MAX_VALUE + 1 == Integer.MIN_VALUE); 以下描述何者正確? (A) 執行時顯示 true (B) 執行時顯示 false (C) 執行時出現錯誤 (D) 編譯失敗 答案:A 提示:Integer.MAX_VALUE 加 1 溢值後就剛好等於 Integer.MIN_VALUE。 6. 如果有以下的程式碼: System.out.println(-Integer.MAX_VALUE == Integer.MIN_VALUE); 以下描述何者正確? (A) 執行時顯示 true (B) 執行時顯示 false (C) 執行時出現錯誤 (D) 編譯失敗 答案:A 提 示 : -Integer.MAX_VALUE 位 元 全 部 就 是 1 , 剛 好 等 於 Integer.MIN_VALUE。 7. 如果有以下的程式碼: int i = 10;
  10. 10. 10 int number = i++; number = --i; 以下描述何者正確? (A) 執行後 number 為 10,i 為 10 (B) 執行後 number 為 10,i 為 11 (C) 執行後 number 為 11,i 為 10 (D) 執行後 number 為 11,i 為 11 答案:A 8. 如果有以下的程式碼: int i = 10; int number = ++i; number = ++i; 以下描述何者正確? (A) 執行後 number 為 11,i 為 11 (B) 執行後 number 為 11,i 為 12 (C) 執行後 number 為 12,i 為 11 (D) 執行後 number 為 12,i 為 12 答案:D。 9. 如果有以下的程式碼: for(int i = 1; i < 10; i++) { if(i == 5) { continue; } System.out.printf("i = %d%n", i); } 以下描述何者正確? (A) 顯示 i =1 到 4,以及 6 到 9 (B) 顯示 i =1 到 9 (C) 顯示 i =1 到 4 (D) 顯示 i = 6 到 9 答案:A 10. 如果有以下的程式碼: for(int number = 0; number != 5; number = (int) (Math.random() * 10)) { System.out.println(number); }
  11. 11. 11 以下描述何者正確? (A) 執行時顯示數字永不停止 (B) 執行時顯示數字 0 後停止 (C) 執行時顯示數字 5 後停止 (D) 執行時顯示數字直到 number 為 5 後停止 答案:D  實作題 1. 如果有 m 與 n 兩個 int 變數,分別儲存 1000 與 495 兩個值,請使用程式 算出最大公因數。 2. 在三位的整數中,例如 153 可以滿足 13 + 53 + 33 = 153,這樣的數稱之為 阿姆斯壯(Armstrong)數,試以程式找出所有三位數的阿姆斯壯數。
  12. 12. 12 第 4 章課後練習 1. 如果有以下的程式碼: int x = 100; int y = 100; Integer wx = x; Integer wy = y; System.out.println(x == y); System.out.println(wx == wy); 在 JDK5 以上的環境編譯與執行,請問顯示結果為何? (A) true、true (B) true、false (C) false、true (D) 編譯失敗 答案:A 2. 如果有以下的程式碼: int x = 200; int y = 200; Integer wx = x; Integer wy = y; System.out.println(x == wx); System.out.println(y == wy); 在 JDK5 以上的環境編譯與執行,請問顯示結果為何? (A) true、true (B) true、false (C) false、true (D) 編譯失敗 答案:A 3. 如果有以下的程式碼: int x = 300; int y = 300; Integer wx = x; Integer wy = y; System.out.println(wx.equals(x)); System.out.println(wy.equals(y));
  13. 13. 13 以下描述何者正確? (A) true、true (B) true、false (C) false、true (E) 編譯失敗 答案:A 4. 如果有以下的程式碼: int[] arr1 = {1, 2, 3}; int[] arr2 = arr1; arr2[1] = 20; System.out.println(arr1[1]); 以下描述何者正確? (A) 執行時顯示 2 (B) 執行時顯示 20 (C) 執行時出現 ArrayIndexOutOfBoundException 錯誤 (D) 編譯失敗 答案:B 5. 如果有以下的程式碼: int[] arr1 = {1, 2, 3}; int[] arr2 = new int[arr1.length]; arr2 = arr1; for(int value : arr2) { System.out.printf("%d", value); } 以下描述何者正確? (A) 執行時顯示 123 (B) 執行時顯示 12300 (C) 執行時出現 ArrayIndexOutOfBoundException 錯誤 (D) 編譯失敗 答案:A 6. 如果有以下的程式碼: String[] strs = new String[5]; 以下描述何者正確? (A) 產生 5 個 String 實例 (B) 產生 1 個 String 實例
  14. 14. 14 (C) 產生 0 個 String 實例 (D) 編譯失敗 答案:C 7. 如果有以下的程式碼: String[] strs = {"Java", "Java", "Java", "Java", "Java"}; 以下描述何者正確? (A) 產生 5 個 String 實例 (B) 產生 1 個 String 實例 (C) 產生 0 個 String 實例 (E) 編譯失敗 答案:B 8. 如果有以下的程式碼: String[][] strs = new String[2][5]; 以下描述何者正確? (A) 產生 10 個 String 實例 (B) 產生 2 個 String 實例 (C) 產生 0 個 String 實例 (D) 編譯失敗 答案:C 9. 如果有以下的程式碼: String[][] strs = { {"Java", "Java", "Java"}, {"Java", "Java", "Java", "Java"} }; System.out.println(strs.length); System.out.println(strs[0].length); System.out.println(strs[1].length); 以下描述何者正確? (A) 顯示 2、3、4 (B) 顯示 2、0、1 (C) 顯示 1、2、3 (D) 編譯失敗 答案:A 10. 如果有以下的程式碼:
  15. 15. 15 String[][] strs = { {"Java", "Java", "Java"}, {"Java", "Java", "Java", "Java"} }; for(________ row : strs) { for(________ str : row) { .... } } 空白處應該分別填上什麼? (A) String、String (B) String、String[] (C) String[]、String (D) String[]、String[] 答案:C  實作題 1. Fibonacci 為 1200 年代歐洲數學家,在他的著作中提過,若一隻免子每月 生一隻小免子,一個月後小免子也開始生產。起初只有一隻免子,一個月後 有兩隻免子,二個月後有三隻免子,三個月後有五隻免子...,也就是每個月 兔子總數會是 1、1 、2、3、5、8、13、21、34、55、89......,這就是費 氏數列,可用公式定義如下: fn = fn-1 + fn-2 if n > 1 fn = n if n = 0, 1 請撰寫程式,可讓使用者輸入想計算的費式數個數,由程式全部顯示出來。 例如: 求幾個費式數?10 0 1 1 2 3 5 8 13 21 34 2. 請撰寫一個簡單的洗牌程式,可在文字模式下顯示洗牌結果。例如: 桃 6 磚 9 磚 6 梅 5 梅 10 心 5 梅 K 梅 6 心 J 心 1 心 6 梅 3 梅 7 磚 4 磚 1 心 7 磚 2 磚 J 梅 Q 桃 2 心 2 梅 2 心 10 桃 7 桃 1 桃 8 心 9 磚 Q 磚 7 心 3 梅 9 梅 1 心 4 桃 Q 桃 10 桃 3 磚 K 桃 K 桃 9 磚 10 梅 8 磚 3 梅 4 磚 8 磚 5 桃 5 心 8 梅 J 心 Q 桃 J 桃 4 心 K 3. 給予一個陣列,請使用程式其中元素排序為由小至大: int[] number = {70, 80, 31, 37, 10, 1, 48, 60, 33, 80};
  16. 16. 16 4. 給予一個排序後的陣列,請撰寫程式可讓使用者在陣列中尋找指定數字,找 到就顯示索引值,找不到就顯示-1: int[] number = {1, 10, 31, 33, 37, 48, 60, 70, 80};
  17. 17. 17 第 5 章課後練習 課後練習  選擇題 1. 如果有以下程式片段: public class Some { private Some some; private Some() {} public static Some create() { if(some == null) { some = new Some(); } return some; } } 以下描述何者正確? (A) 編譯失敗 (B) 客戶端必須 new Some()產 Some 生實例 (C) 客戶端必須 new Some().create()產生 Some 實例 (D) 客戶端必須 Some.create()產生 Some 實例 答案:A 2. 如果有以下程式片段: int[] scores1 = {88, 81, 74, 68, 78, 76, 77, 85, 95, 93}; int[] scores2 = Arrays.copyOf(scores1, scores1.length); 其中 Arrays 完全吻合名稱為 java.util.Arrays,以下描述何者正確? (A) Arrays.copyOf()應該改為 new Arrays().copyOf() (B) copyOf()是 static 成員 (C) copyOf()是 public 成員 (D) Arrays 被宣告為 public 答案:B、C、D 3. 如果有以下程式片段: public class Some {
  18. 18. 18 public int x; public Some(int x) { this.x = x; } } 以下描述何者正確? (A) 建構 Some 時,可使用 new Some()或 new Some(10)形式 (B) 建構 Some 時,只能使用 new Some()形式 (C) 建構 Some 時,只能使用 new Some(10)形式 (D) 沒有無引數建構式,所以編譯失敗 答案:C 4. 如果有以下程式片段: public class Some { public int x; public Some(int x) { x = x; } } 以下描述何者正確? (A) new Some(10)建構物件後,物件成員 x 值為 10 (B) new Some(10)建構物件後,物件成員 x 值為 0 (C) Some s = new Some(10)後,可使用 s.x 取得值 (D) 編譯失敗 答案:B、C 5. 如果有以下程式片段: public class Some { private int x; public Some(int x) { this.x = x; } } 以下描述何者正確? (A) new Some(10)建構物件後,物件成員 x 值為 10 (B) new Some(10)建構物件後,物件成員 x 值為 0 (C) Some s = new Some(10)後,可使用 s.x 取得值 (D) 編譯失敗
  19. 19. 19 答案:A 6. 如果有以下程式片段: package cc.openhome.util; class Some { public int x; public Some(int x) { this.x = x; } } 以下描述何者正確? (A) cc.openhome.util 套件中其它程式碼可以 new Some(10) (B) cc.openhome.util 套件外其它程式碼可以 new Some(10) (C) 可以在其它套件 import cc.openhome.util.Some; (D) 編譯失敗 答案:A 7. 如果有以下程式片段: public class Some { private final int x; public Some() {} public Some(int x) { this.x = x; } } 以下描述何者正確? (A) new Some(10)建構物件後,物件成員 x 值為 10 (B) new Some(10)建構物件後,物件成員 x 值為 0 (C) Some s = new Some(10)後,可使用 s.x 取得值 (D) 編譯失敗 答案:D 8. 如果有以下程式片段: public class Some { public static int sum(int... numbers) { int sum = 0; for(int i = 10; i < numbers.length; i++) { sum += numbers[i];
  20. 20. 20 } return sum; } } 以下描述何者正確? (A) 可使用 Some.sum(1, 2, 3)加總 1、2、3 (B) 可使用 new Some().sum(1, 2, 3)加總 1、2、3 (C) 可使用 Some.sum(new int[1, 2, 3])加總 1、2、3 (D) 編譯失敗,因為不定長度引數只能用增強式 for 迴圈語法 答案:A、B、C 9. 如果有以下程式片段: public class Some { public static void someMethod(int i) { System.out.println("int 版本被呼叫"); } public static void someMethod(Integer integer) { System.out.println("Integer 版本被呼叫"); } } 以下描述何者正確? (A) Some.someMethod(1)顯示「int 版本被呼叫」 (B) Some.someMethod(1)顯示「Integer 版本被呼叫」 (C) Some.someMethod(new Integer(1))顯示「int 版本被呼叫」 (D) 編譯失敗 答案:A 10. 如果有以下程式片段: public class Main { public int some(int... numbers) { int sum = 0; for(int number : numbers) { sum += number; } return sum; } public static void main(String[] args) { System.out.println(sum(1, 2, 3));
  21. 21. 21 } } 以下描述何者正確? (A) 顯示 6 (B) 顯示 1 (C) 無法執行 (D) 編譯失敗 答案:D  實作題 1. 據說創世紀時有座波羅教塔由三支鑽石棒支撐,神在第一根棒上放置 64 個 由小至大排列的金盤,命令僧侶將所有金盤從第一根棒移至第三根棒,搬運 過程遵守大盤在小盤下的原則,若每日僅搬一盤,在盤子全數搬至第三根 棒,此塔將毀損。請撰寫程式,可輸入任意盤數,依以上搬運原則顯示搬運 過程。 2. 如果有個二維陣列代表迷宮如下,0 表示道路、2 表示牆壁: int[][] maze = { {2, 2, 2, 2, 2, 2, 2}, {0, 0, 0, 0, 0, 0, 2}, {2, 0, 2, 0, 2, 0, 2}, {2, 0, 0, 2, 0, 2, 2}, {2, 2, 0, 2, 0, 2, 2}, {2, 0, 0, 0, 0, 0, 2}, {2, 2, 2, 2, 2, 0, 2} }; 假設老鼠會從索引(1, 0)開始,請使用程式找出老鼠如何跑至索引(6, 5)位 置,並以█代表牆,◇代表老鼠,顯示出走迷宮路徑。如下所示: 3. 有個 8 乘 8 棋盤,騎士走法為西洋棋走法,請撰寫程式,可指定騎士從棋盤 任一位置出發,以標號顯示走完所有位置。例如其中一個走法: 52 21 64 47 50 23 40 3 63 46 51 22 55 2 49 24
  22. 22. 22 20 53 62 59 48 41 4 39 61 58 45 54 1 56 25 30 44 19 60 57 42 29 38 5 13 16 43 34 37 8 31 26 18 35 14 11 28 33 6 9 15 12 17 36 7 10 27 32 4. 西洋棋中皇后可直線前進,吃掉遇到的棋子,如果棋盤上有八個皇后,請撰 寫程式,顯示八個皇后相安無事地放置在棋盤上的所有方式。例如其中一個 放法:
  23. 23. 23 第 6 章課後練習 課後練習  選擇題 1. 如果有以下程式片段: class Some { void doService() { System.out.println("some service"); } } class Other extends Some { @Override void doService() { System.out.println("other service"); } } public class Main { public static void main(String[] args) { Other other = new Other(); other.doService(); } } 以下描述何者正確? (A) 編譯失敗 (B) 顯示 some service (C) 顯示 other service (D) 先顯示 some service、後顯示 other service 答案:C 2. 承上題,如果 main()中改為: Some some = new Other(); some.doService(); 以下描述何者正確? (A) 編譯失敗
  24. 24. 24 (B) 顯示 some service (C) 顯示 other service (D) 先顯示 some service、後顯示 other service 答案:C 3. 如果有以下程式片段: class Some { String ToString() { return "Some instance"; } } public class Main { public static void main(String[] args) { Some some = new Some(); System.out.println(some); } } 以下描述何者正確? (A) 顯示 Some instance (B) 顯示 Some@XXXX,XXXX 為 16 進位數字 (C) 發生 ClassCastException (D) 編譯失敗 答案:B 提示:因為是新定義了個 ToString()方法,而非重新定義 toString()方法 4. 如果有以下程式片段: class Some { int hashCode() { return 99; } } public class Main { public static void main(String[] args) { Some some = new Some(); System.out.println(some.hashCode()); } } 以下描述何者正確?
  25. 25. 25 (A) 顯示 99 (B) 顯示 0 (C) 發生 ClassNotFoundException (D) 編譯失敗 答案:D 提示:因為 hashCode()在 Object 中定義為 public 5. 如果有以下程式片段: class Some { @Override String ToString() { return "Some instance"; } } public class Main { public static void main(String[] args) { Some some = new Some(); System.out.println(some); } } 以下描述何者正確? (A) 顯示 Some instance (B) 顯示 Some@XXXX,XXXX 為 16 進位數字 (C) 發生 ClassCastException (D) 編譯失敗 答案:D 提示:因為加了@Override,實際上父類別中並沒有 ToString()方法 6. 如果有以下程式片段: class Some { abstract void doService(); } class Other extends Some { @Override void doService() { System.out.println("other service"); } }
  26. 26. 26 public class Main { public static void main(String[] args) { Some some = new Other(); some.doService(); } } 以下描述何者正確? (A) 編譯失敗 (B) 顯示 other service (C) 執行時發生 ClassCastException (D) 移除@Override 可編譯成功 答案:A 7. 如果有以下程式片段: class Some { protected int x; Some(int x) { this.x = x; } } class Other extends Some { Other(int x) { this.x = x; } } 以下描述何者正確? (A) new Other(10)後,物件成員 x 值為 10 (B) new Other(10)後,物件成員 x 值為 10 (C) Other 中無法存取 x 的編譯失敗 (D) Other 中無法呼叫父類別建構式的編譯失敗 答案:D 8. 如果有以下程式片段: public class IterableString extends String { public IterableString(String original) { super(original); } public void iterate() {
  27. 27. 27 //... } } 以下描述何者正確? (A) String s = new IterableString("J")可通過編譯 (B) IterableString s = new IterableString("J")可通過 編譯 (C) 因無法呼叫 super()的編譯失敗 (D) 因無法繼承 String 的編譯失敗 答案:D 提示:String 類別是 final 類別 9. 如果有以下程式片段: class Some { Some() { this(10); System.out.println("Some()"); } Some(int x) { System.out.println("Some(int x)"); } } class Other extends Some { Other() { super(10); System.out.println("Other()"); } Other(int y) { System.out.println("Other(int y)"); } } 以下描述何者正確? (A) new Other()顯示"Some(int x)"、"Other()" (B) new Other(10)顯示"Other(int y)" (C) new Some()顯示"Some(int x)"、"Some()" (D) 編譯失敗 答案:A、C
  28. 28. 28 10. 如果有以下程式片段: class Some { Some() { System.out.println("Some()"); this(10); } Some(int x) { System.out.println("Some(int x)"); } } class Other extends Some { Other() { super(10); System.out.println("Other()"); } Other(int y) { System.out.println("Other(int y)"); } } 以下描述何者正確? (A) new Other()顯示"Some(int x)"、"Other()" (B) new Other(10)顯示"Some()"、"Some(int x)"、"Other(int y)" (C) new Some()顯示"Some(int x)"、"Some()" (D) 編譯失敗 答案:D 提示:this()或 super()都只能出現在建構式第一行  實作題 1. 如果使用 6.2.5 設計的 ArrayList 類別收集物件,想顯示所收集物件之字 串描述時,必須如下: ArrayList list = new ArrayList(); //...收集物件 for(int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } 請重新定義 ArrayList 的 toString()方法,讓客戶端想顯示所收集物
  29. 29. 29 件之字串描述時,可以如下: ArrayList list = new ArrayList(); //...收集物件 System.out.println(list); 2. 承上題,若想比較兩個 ArrayList 實例是否相等,希望可以如下比較: ArrayList list1 = new ArrayList(); //...用 list1 收集物件 ArrayList list2 = new ArrayList(); //...用 list2 收集物件 System.out.println(list1.equals(list2)); 請重新定義 ArrayList 的 equals()方法,先比較收集的物件個數,再比 較各索引之物件實質上是否相等(使用各物件的 equals()比較)。
  30. 30. 30 第 7 章課後練習 課後練習  選擇題 1. 如果有以下程式片段: interface Some { protected void doSome(); } class SomeImpl implements Some { public void doSome() { System.out.println("作一些事"); } } public class Main { public static void main(String[] args) { Some s = new SomeImpl(); s.doSome(); } } 以下描述何者正確? (A) 編譯失敗 (B) 顯示"作一些事" (C) 發生 ClassCastException (D) 執行時不顯示任何訊息 答案:A 2. 如果有以下程式片段: interface Some { int x = 10; } public class Main { public static void main(String[] args) { System.out.println(Some.x); }
  31. 31. 31 } 以下描述何者正確? (A) 編譯失敗 (B) 顯示 10 (C) 必須建構 Some 實例才能存取 x (D) 顯示 0 答案:B 3. 如果有以下程式片段: interface Some { void doSome(); } class SomeImpl implements Some { void doSome() { System.out.println("作一些事"); } } public class Main { public static void main(String[] args) { Some s = new SomeImpl(); s.doSome(); } } 以下描述何者正確? (A) 編譯失敗 (B) 顯示"作一些事" (C) 發生 ClassCastException (D) 執行時不顯示任何訊息 答案:A 4. 如果有以下程式片段: interface Some { void doSome(); } class SomeImpl implements Some { public void doSome() { System.out.println("作一些事"); }
  32. 32. 32 } public class Main { public static void main(String[] args) { Some s = new SomeImpl(); s.doSome(); } } 以下描述何者正確? (A) 編譯失敗 (B) 顯示"作一些事" (C) 發生 ClassCastException (D) 執行時不顯示任何訊息 答案:B 5. 如果有以下程式片段: interface Some { void doSome(); } interface Other { void doOther(); } class SomeOtherImpl implements Some, Other { public void doSome() { System.out.println("作一些事"); } public void doOther() { System.out.println("作其它事"); } } public class Main { public static void main(String[] args) { Some s = new SomeOtherImpl(); s.doSome(); Other o = (Other) s; o.doOther(); } } 以下描述何者正確?
  33. 33. 33 (A) 編譯失敗 (B) 顯示"作一些事"、"作其它事" (C) 發生 ClassCastException (D) 執行時不顯示任何訊息 答案:B 6. 如果有以下程式片段: interface Some { void doSome(); } abstract class AbstractSome implements Some { public abstract void doSome(); public void doService() { System.out.println("作一些服務"); } } public class Main { public static void main(String[] args) { AbstractSome s = new AbstractSome(); s.doService(); } } 以下描述何者正確? (A) 編譯失敗 (B) 顯示"作一些服務" (C) 發生 ClassCastException (D) 執行時不顯示任何訊息 答案:A 7. 如果有以下程式片段: interface Some { void doSome(); } abstract class AbstractSome implements Some { public abstract void doSome(); public void doService() { System.out.println("作一些服務"); }
  34. 34. 34 } public class Main { public static void main(String[] args) { AbstractSome s = new AbstractSome() { public void doSome() { System.out.println("作一些事"); } public void doService() { } }; s.doService(); } } 以下描述何者正確? (A) 編譯失敗 (B) 顯示"作一些服務" (C) 發生 ClassCastException (D) 執行時不顯示任何訊息 答案:D 8. 如果有以下程式片段: interface Some { void doSome(); } public class Main { public static void main(String[] args) { Some s = new Some() { public void doSome() { System.out.println("作一些事"); } public void doService() { System.out.println("作一些服務"); } }; s.doService(); } } 以下描述何者正確?
  35. 35. 35 (A) 編譯失敗 (B) 顯示"作一些服務" (C) 發生 ClassCastException (D) 執行時不顯示任何訊息 答案:A 9. 如果有以下程式片段: interface Some { protected static final int x = 10; } public class Main { public static void main(String[] args) { System.out.println(Some.x); } } 以下描述何者正確? (A) 編譯失敗 (B) 顯示 10 (C) 必須建構 Some 實例才能存取 x (D) 顯示 0 答案:A 10. 如果有以下程式片段: interface Some { void doSome(); void doService() { System.out.println("作一些服務"); } } class SomeImpl implements Some { public void doSome() { System.out.println("作一些事"); } } public class Main { public static void main(String[] args) { Some s = new SomeImpl();
  36. 36. 36 s.doSome(); s.doService(); } } 以下描述何者正確? (A) 編譯失敗 (B) 顯示"作一些事"、"作一些服務" (C) 發生 ClassCastException (D) 執行時不顯示任何訊息 答案:A  實作題 1. 針對 5.1 設計的 CashCard 類別,老闆要你寫個 CashCardService 類別, 其中有個 save()方法,可以把每個 CashCard 實例的 number、balance 與 bonus 儲存下來,有個 load()方法,可以指定卡號載入已儲存的 CashCard: public void save(CashCard cashCard) public CashCard load(String number) 可是老闆也還沒決定要存為檔案?存到資料庫?或存到另一台電腦?你怎 麼寫 CashCardService 呢? 提示:搜尋關鍵字「DAO」 2. 假設今天要開發一個動畫編輯程式,每個畫面為影格(Frame),數個影格 可組合為動畫清單(Play list),動畫清單也可由其它已完成動畫清單組成, 也可在動畫清單與清單間加入個別影格,如何設計程式解決這個需求? 提示:搜尋關鍵字「Composite 模式」
  37. 37. 37 第 8 章課後練習  選擇題 1. 如果有以下程式片段: public class Main { public static void main(String[] args) { try { int number = Integer.parseInt(args[0]); System.out.println(number++); } catch(NumberFormatException ex) { System.out.println("必須輸入數字"); } } } 執行時若沒有指定命令列引數,以下描述何者正確? (A) 編譯錯誤 (B) 顯示"必須輸入數字" (C) 顯示 ArrayIndexOutOfBoundException 堆疊追蹤 (D) 不顯示任何訊息 答案:C 2. 如果有以下程式片段: public class Main { public static void main(String[] args) { Object[] objs = {"Java", "7"}; Integer number = (Integer) objs[1]; System.out.println(number); } } 根據圖 8.2,以下描述何者正確? (A) 編譯錯誤 (B) 顯示 7 (C) 顯示 ClassCastException 堆疊追蹤 (D) 不顯示任何訊息 答案:C
  38. 38. 38 3. 如果有以下程式片段: public class Main { public static void main(String[] args) { try { int number = Integer.parseInt(args[0]); System.out.println(number++); } catch(NumberFormatException ex) { System.out.println("必須輸入數字"); } } } 執行時若指定命令列引數 one,以下描述何者正確? (A) 編譯錯誤 (B) 顯示"必須輸入數字" (C) 顯示 ArrayIndexOutOfBoundException 堆疊追蹤 (D) 不顯示任何訊息 答案:B 4. FileInputStream 的 建 構 式 使 用 throws 宣 告 了 FileNotFoundException,如果有以下程式片段: public class FileUtil { public static String readFile(String name) throws ______________ { FileInputStream input = new FileInputStream(name); ... } } 請問空格處填入以下哪些選項可以通過編譯? (A) Throwable (B) Error (C) IOException (D) FileNotFoundException 答案:A、C、D 5. FileInputStream 的 建 構 式 使 用 throws 宣 告 了 FileNotFoundException,如果有以下程式片段: public class FileUtil { public static String readFile(String name) { FileInputStream input = null;
  39. 39. 39 try { input = new FileInputStream(name); ... } catch(_____________________ ex) { ... } } } 請問空格處填入以下哪些選項可以通過編譯? (A) Throwable (B) Error (C) IOException (D) FileNotFoundException 答案:A、C、D 6. 如果有以下程式片段: class Resource { void doService() throws IOException { ... } } class Some extends Resource { @Override void doService() throws __________________ { ... } } 請問空格處填入以下哪些選項可以通過編譯? (A) Throwable (B) Error (C) IOException (D) FileNotFoundException 答案:C、D 7. 如果有以下程式片段: public class Main { public static void main(String[] args) { try {
  40. 40. 40 int number = Integer.parseInt(args[0]); System.out.println(number++); } catch(ArrayIndexOutOfBoundException | NumberFormatException ex) { System.out.println("必須輸入數字"); } } } 執行時若沒有指定命令列引數,以下描述何者正確? (A) 編譯錯誤 (B) 顯示"必須輸入數字" (C) 顯示 ArrayIndexOutOfBoundException 堆疊追蹤 (D) 不顯示任何訊息 答案:B 8. 如果有以下程式片段: public class Main { public static void main(String[] args) { try { int number = Integer.parseInt(args[0]); System.out.println(number++); } catch(RuntimeException | NumberFormatException ex) { System.out.println("必須輸入數字"); } } } 執行時若沒有指定命令列引數,以下描述何者正確? (A) 編譯錯誤 (B) 顯示"必須輸入數字" (C) 顯示 ArrayIndexOutOfBoundException 堆疊追蹤 (D) 不顯示任何訊息 答案:A 9. FileInputStream 的 建 構 式 使 用 throws 宣 告 了 FileNotFoundException,如果有以下程式片段: public class FileUtil { public static String readFile(String name) { try(FileInputStream input = new FileInputStream(name)) {
  41. 41. 41 ... } } } 以下描述何者正確? (A) 編譯失敗 (B) 編譯成功 (C) 呼叫 readFile()時必須處理 FileNotFoundException (D) 呼叫 readFile()時不一定要處理 FileNotFoundException 答案:A 10. 如果 ResourceSome 與 ResourceOther 都實作了 AutoCloseable 介 面: public class Main { public static void main(String[] args) { try(ResourceSome some = new ResourceSome(); ResourceOther other = new ResourceOther()) { ... } } } 以下描述何者正確? (A) 執行完 try 後會先關閉 ResourceSome (B) 執行完 try 後會先關閉 ResourceOther (C) 執行完 main()後才關閉 ResourceSome 與 ResourceOther (D) 編譯失敗 答案:A  實作題 1. 針對 5.2 設計的 CashCard 類別,store()與 charge()方法傳入負數時, 錯誤訊息只顯示在文字模式下,這當然不是正確的方式,請修改 store() 與 charge()方法傳入負數時,拋出 IllegalArgumentException。 2. 續上題,修改 CashCard 類別,在點數或餘額不足時,請拋出以下例外, 其中 number 表示剩餘點數或餘額: package cc.openhome.virtual; public class InsufficientException extends Exception { private int number; public InsufficientException(String message, int remain) {
  42. 42. 42 super(message); this.number = remain; } public int getNumber() { return number; } }
  43. 43. 43 第 9 章課後練習  選擇題 1. 如果有以下程式片段: import java.util.*; public class Main { public static void main(String[] args) { foreach(new HashSet()); foreach(new ArrayList()); } private static void foreach(___________ elements) { for(Object o : elements) { ... } } } 空白部份指定哪些型態可以通過編譯? (A) HashSet (B) ArrayList (C) Collection (D) Iterable 答案:C、D 2. 如果有以下程式片段: import java.util.*; public class Main { public static void main(String[] args) { foreach(new _____________()); } private static void foreach(Iterable iterable) { for(Object o : iterable) { ... } } } 空白部份指定哪些型態可以通過編譯?
  44. 44. 44 (A) HashSet (B) ArrayList (C) Collection (D) Iterable 答案:A、B 提示:C、D 是介面,無法建構實例 3. 如果有以下程式片段: import java.util.*; public class Main { public static void main(String[] args) { foreach(new HashSet()); } private static void foreach(Collection collection) { __________ elements = collection.iterator(); while(elements.hasNext()) { System.out.println(elements.next()); } } } 空白部份指定哪些型態可以通過編譯? (A) List (B) Set (C) Iterator (D) Iterable 答案:C 4. 如果有以下程式片段: import java.util.*; class Student { String number; String name; int score; Student(String number, String name, int score) { this.number = number; this.name = name; this.score = score; }
  45. 45. 45 } public class Main { public static void main(String[] args) { Set<Student> students = new TreeSet<>(); students.add(new Student("B1234", "Justin", 90)); students.add(new Student("B5678", "Monica", 100)); ... foreach(students); } private static void foreach(Collection<Student> students) { for(Student student : students) { System.out.println(student.score); } } } 以下描述何者正確? (A) 依 score 從小至大顯示結果 (B) 依 toString()自然排序由小至大顯示結果 (C) 依 hashCode()自然排序由小至大顯示結果 (D) 拋出 ClassCastException 答案:D 5. 如果有以下程式片段: import java.util.*; class Student { String number; String name; int score; Student(String number, String name, int score) { this.number = number; this.name = name; this.score = score; } } public class Main { public static void main(String[] args) { Set<Student> students = new HashSet<>(); students.add(new Student("B1234", "Justin", 90));
  46. 46. 46 students.add(new Student("B5678", "Monica", 100)); students.add(new Student("B1234", "Justin", 100)); students.add(new Student("B5678", "Monica", 98)); students.add(new Student("B5678", "Monica", 100)); System.out.println(students.size()); } } 以下描述何者正確? (A) 顯示 2 (B) 顯示 3 (C) 顯示 4 (D) 顯示 5 答案:D 6. 如果有以下程式片段: import java.util.*; public class Main { public static void main(String[] args) { Set<Integer> numbers = new TreeSet<>(); numbers.add(1); numbers.add(2); numbers.add(1); numbers.add(3); foreach(numbers); } private static void foreach(Collection<Integer> numbers) { for(Integer number : numbers) { System.out.println(number); } } } 以下描述何者正確? (A) 從小至大顯示數字結果 (B) 從大至小顯示數字結果 (C) 編譯失敗 (D) 拋出 ClassCastException 答案:A
  47. 47. 47 7. 關於增強式 for 迴圈語法,可適用於以下哪些型態? 以下描述何者正確? (A) 陣列 (B) List (C) Set (D) Map 答案:A、B、C 8. 如果有以下程式片段: import java.util.*; public class Main { public static void main(String[] args) { Set numbers = new TreeSet(); numbers.add(1); numbers.add(2); numbers.add(1); numbers.add(3); for(Integer number : numbers) { System.out.println(number); } } } 以下描述何者正確? (A) 從小至大顯示數字結果 (B) 從大至小顯示數字結果 (C) 編譯失敗 (D) 拋出 ClassCastException 答案:C 9. 如果有以下程式片段: import java.util.*; public class Main { public static void main(String[] args) { Set<____________> numbers = new TreeSet<>(); numbers.add(1); numbers.add(2); numbers.add(1); numbers.add(3);
  48. 48. 48 for(Integer number : numbers) { System.out.println(number); } } } 空白處要填入何種型態才可編譯成功? (A) Object (B) Long (C) Integer (D) Short 答案:C 10. 如果有以下程式片段: import java.util.*; public class Main { public static void main(String[] args) { Map<String, String> messages = new HashMap<>(); messages.put("Justin", "Hello"); messages.put("Monica", "HiHi"); foreach(messages.values()); } private static void foreach(_____________ values) { for(String value : values) { System.out.println(value); } } } 空白處要填入何種型態才可編譯成功? (A) Set (B) Collection (C) Collection<String> (D) Iterable<String> 答案:C、D  實作題 1. 嘗試寫個 IterableString 類別,可指定字串建構 IterableString 實 例,讓該實例可使用增強式 for 迴圈,逐一取出字串中的字元。 2. 如果有個字串陣列如下:
  49. 49. 49 String[] words = {"RADAR","WARTER START","MILK KLIM","RESERVERED","IWI"}; 請撰寫程式,判斷字串陣列中有哪些字串,從前面看的字元順序,與從後面 看的字元順序是相同的。 提示:可使用 Deque。
  50. 50. 50 第 10 章課後練習  選擇題 1. 輸入輸出串流的父類別是哪兩個? (A) InputStream (B) Reader (C) OutputStream (D) Writer 答案:A、C 2. 處理字元輸入輸出的父類別是哪兩個? (A) InputStream (B) Reader (C) OutputStream (D) Writer 答案:B、D 3. 以下哪兩個類別為 InputStream、OutputStream 提供緩衝區作用? (A) BufferedInputStream (B) BufferedReader (C) BufferedOutputStream (D) BufferedWriter 答案:A、C 4. 以下哪兩個類別為 Reader、Writer 提供緩衝區作用? (A) BufferedInputStream (B) BufferedReader (C) BufferedOutputStream (D) BufferedWriter 答案:B、D 5. 如果有以下程式片段: ObjectInputStream input = new ObjectInputStream(new ________________); 空白部份指定哪些型態可以通過編譯? (A) FileInputStream("Account.data") (B) FileReader("Main.java")
  51. 51. 51 (C) InputStreamReader(new FileReader("Main.java")) (D) ObjectReader("Account.data") 答案:A 6. 如果有以下程式片段: BufferedReader reader = new BufferedReader(new ________________); 空白部份指定哪些型態可以通過編譯? (A) FileInputStream("Account.data") (B) FileReader("Main.java") (C) InputStreamReader(new FileInputStream("Main.java")) (D) ObjectReader("Account.data") 答案:B、C 7. 以下哪兩個類別分別擁有 readObject()、writeObject()方法? (A) BufferedInputStream (B) ObjectInputStream (C) ObjectOutputStream (D) BufferedOutputStream 答案:B、C 8. 以下哪兩個類別為 InputStream、OutputStream 提供編碼轉換作用? (A) BufferedInputStream (B) InputStreamReader (C) BufferedOutputStream (D) OutputStreamWriter 答案:B、D 9. 以下哪兩個類別為 Reader、Writer 提供編碼轉換作用? (A) BufferedInputStream (B) InputStreamReader (C) BufferedOutputStream (D) 以上皆非 答案:D 10. 以下哪些類別位於 java.io 套件之中? (A) BufferedInputStream (B) IOException
  52. 52. 52 (C) Scanner (D) BufferedReader 答案:A、B、D  實作題: 1. 在例外發生時,可以使用例外物件的 printStackTrace()顯示堆疊追 蹤,如何改寫以下程式,使得例外發生時,可將堆疊追蹤附加至 UTF-8 編 碼的 exception.log 檔案: package cc.openhome; import java.io.*; public class Exercise1 { public static void dump(InputStream src, OutputStream dest) throws IOException { try (InputStream input = src; OutputStream output = dest) { byte[] data = new byte[1024]; int length = -1; while ((length = input.read(data)) != -1) { output.write(data, 0, length); } } catch(IOException ex) { throw ex; } } } 2. 請撰寫程式,可將任何編碼的文字檔案讀入,指定檔名轉存為 UTF-8 的文 字檔案。
  53. 53. 53 第 11 章課後練習  選擇題 1. 可以實作哪個介面,建立執行流程? (A) Runnable (B) Thread (C) Future (D) Executor 答案:A 2. 可以繼承哪個類別,定義執行緒執行流程? (A) Runnable (B) Thread (C) Future (D) Executor 答案:B 3. 呼叫 Thread 的 start()後,執行緒會處於哪個狀態? (A) Running (B) Runnable (C) Wait Blocked (D) IO Blocked 答案:B 4. 以下哪些方法會使執行緒進入阻斷狀態? (A) Thread.sleep() (B) wait() (C) notify() (D) interrupt() 答案:A、B 5. 如果有以下程式片段: Thread thread = new Thread(new ________________() { public void run() { ... }
  54. 54. 54 }); 空白部份指定哪些型態可以通過編譯? (A) Runnable (B) Thread (C) Future (D) Executor 答案:A、B 提示:Thread 也實作了 Runnable 介面。 6. 呼叫執行緒的 interrupt()方法,會拋出哪個例外物件? (A) IOException (B) IllegalStateException (C) RuntimeException (D) InterruptedException 答案:D 7. 如果有以下程式片段: ... public ____________ void add(Object o) { if(next == list.length) { list = Arrays.copyOf(list, list.length * 2); } list[next++] = o; } ... 為了確保 add()在多執行緒存取下的執行緒安全,應該加上哪個關鍵字? (A) abstract (B) synchronized (C) static (D) volatile 答案:B 8. 在使用高階並行 API 時,哪個介面的實作物件可實現 synchronized 的功 能? (A) Lock (B) Condition (C) Future (D) Callable
  55. 55. 55 答案:A 9. 在使用高階並行 API 時,哪個介面的實作物件可實現 Object 的 wait()、 notify()、notifyAll()功能? (A) Lock (B) Condition (C) Future (D) Callable 答案:B 10. 在使用高階並行 API 時,哪個介面的實作物件可以讓你於未來取得執行結 果? (A) Lock (B) Condition (C) Future (D) Callable 答案:C  實作題: 1. 如果有個執行緒池可以分配執行緒來執行 Request 實作物件的 execute() 方法,執行完後該執行緒類別必須能重複使用,該執行緒類別如何設計呢? 假設 Request 介面定義如下: public interface Request { void execute(); }
  56. 56. 56 第 12 章課後練習  選擇題 1. Java 日誌 API 中,哪個類別負責實際輸出? (A) Logger (B) Handler (C) Filter (D) Formatter 答案:B 2. Java 日誌 API 中,輸出的日誌會經過哪兩個類別的過濾? (A) Logger (B) Handler (C) Formatter (D) Stream 答案:A、B 3. 國際化的三個重要觀念是? (A) 地區資訊 (B) 資源包 (C) 基礎名稱(Base name) (D) 格式化 答案:A、B、C 4. Date 的 API 有許多方法都不再建議使用,應改用哪個類別的相關方法取 代? 空白部份指定哪些型態可以通過編譯? (A) DateFormat (B) TimeStamp (C) Time (D) Calendar 答案:D 5. 哪個類別代表可重用的規則表示式? (A) Pattern (B) Matcher
  57. 57. 57 (C) Glob (D) Regex 答案:A  實作題 1. 撰寫程式如下顯示本月日曆: 2. 撰寫程式可如下指定目錄與 Glob 模式,遞迴搜尋指定目錄與子目錄中符合 模式的檔案名稱,Glob 模式必須包括在""中以避免被主控台解釋為特定字 元(例如萬用字元'*')。
  58. 58. 58 第 13 章課後練習  選擇題 1. 以下哪些類別,是 java.awt.Container 的子類別? (A) java.awt.Label (B) javax.swing.JComponent (C) javax.swing.JButton (D) java.awt.BorderLayout 答案:B、C 2. 以下哪些類別,是 java.awt.Component 的子類別? (A) java.awt.Label (B) javax.swing.JComponent (C) javax.swing.JButton (D) java.awt.BorderLayout 答案:A、B、C、D 3. 要實作滑鼠傾聽器,可以繼承哪個類別? (A) java.awt.event.MouseListener (B) java.awt.event.MouseAdapter (C) java.awt.event.KeyListener (D) java.awt.event.KeyAdapter 答案:B 4. JFrame 視窗右上角 X 按鈕按下時該採取的動作,預設是? (A) WindowConstants.DISPOSE_ON_CLOSE (B) WindowConstants.DO_NOTHING_ON_CLOSE (C) WindowConstants.EXIT_ON_CLOSE (D) WindowConstants.HIDE_ON_CLOSE 答案:D 5. 以下哪個類別是可獨立顯示,不用加入其它容器的視窗元件? (A) java.awt.Frame (B) java.awt.BorderLayout (C) javax.swing.JFrame (D) javax.swing.JButton
  59. 59. 59 答案:A、C  實作題 1. 請任選主題,使用 Swing 設計一款視窗遊戲(例如俄羅斯方塊),你也許需 要使用 Java 2D 在視窗上繪圖,可參考以下網址:  http://download.oracle.com/javase/tutorial/2d/TOC.html
  60. 60. 60 第 14 章課後練習  選擇題 1. 哪些 JDBC 驅動程式可以有跨平台的特性? (A) TYPE 1 (B) TYPE 2 (C) TYPE 3 (D) TYPE 4 答案:C、D 2. 哪種 JDBC 驅動程式是基於資料庫所提供的 API 來進行實作? (A) TYPE 1 (B) TYPE 2 (C) TYPE 3 (D) TYPE 4 答案:B 3. JDBC 相關介面或類別,是放在哪個套件之下加以管理? (A) java.lang (B) javax.sql (C) java.sql (D) java.util 答案:C 4. 使用 JDBC 時,通常會需要處理哪個受檢例外(Checked Exception)? (A) RuntimeException (B) SQLException (C) DBException (D) DataException 答案:B 5. 關於 Connection 的描述,何者正確? (A) 可以從 DriverManager 上取得 Connection (B) 可以從 DataSource 上取得 Connection (C) 在方法結束之後 Connection 會自動關閉 (D) Connection 是執行緒安全(Thread-safe)
  61. 61. 61 答案:A、B 提示:Connection 不是執行緒安全的,不可以在多執行緒環境下共用 Connection,以免發生資料錯亂的問題。 6. 使用 Statement 來執行 SELECT 等查詢用的 SQL 指令時,應使用下列哪 個方法? (A) executeSQL() (B) executeQuery() (C) executeUpdate() (D) executeFind() 答案:B 7. 哪個物件正確使用下,可以適當地避免 SQL Injection 的問題? (A) Statement (B) ResultSet (C) PreparedStatement (D) Command 答案:C 8. 取得 Connection 之後,如何取得 Statement 物件? (A) conn.createStatement() (B) conn.buildStatement() (C) conn.getStatement() (D) conn.createSQLStatement() 答案:A 9. 以下描述何者有誤? (A) 使用 Statement 一定會發生 SQL Injection (B) 使用 PreparedStatement 就不會發生 SQL Injection (C) 不使用 Connection 時必須加以關閉 (D) ResultSet 代表查詢的結果集合 答案:A、B 提示:只要有正確的使用觀念,即使用 Statement 也不一定會發生 SQL Injection。如果使用不正確,使用 PreparedStatement 也有可能發生 SQL Injection。 10. 使用 Statement 的 executeQuery()方法,會傳回哪個型態? (A) int
  62. 62. 62 (B) boolean (C) ResultSet (D) Table 答案:C  實作題 1. 請嘗試撰寫一個 JdbcTemplate 類別封裝 JDBC 更新操作,可以如下使用 其 update()方法: JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); jdbcTemplate.update( "INSERT INTO t_message(name, email, msg) VALUES (?,?,?)", "測試員", "tester@openhome.cc", "這是一個測試留言"); 其中 dataSource 參考至 DataSource 實作物件,update()第一個參數 接受更新 SQL,之後的不定長度引數可指受 SQL 中佔位字元 ?實際資料, 不定長度引數部份不一定是字串,也可接受表 14.1 列出的資料型態。 提示:搜尋關鍵字「JdbcTemplate」了解相關設計方式。
  63. 63. 63 第 15 章課後練習  選擇題 1. 以下哪個類別是.class 檔案載入 JVM 後的代表? (A) java.lang.Class (B) java.lang.ClassLoader (C) java.lang.Object (D) java.lang.Definition 答案:A 2. 以下哪個類別類別中方法的代表? (A) java.lang.Class (B) java.lang.reflect.Constructor (C) java.lang.reflect.Method (D) java.lang.reflect.Field 答案:C 3. 類別載入器都繼承自哪個類別? (A) java.lang.Class (B) java.lang.ClassLoader (C) java.lang.Object (D) java.lang.Definition 答案:B 4. 以下程式碼片段建立 ClassLoader 實例,其父類別載入器是? URL url = new URL("file:/d:/workspace/"); ClassLoader loader = new URLClassLoader(new URL[] {url}); (A) Bootstrap Loader (B) Extended Loader (C) System Loader (D) null 答案:C 5. 如果 file:/d:/workspace/資料夾為空,關於以下程式碼片段,何者描述正確? String clz1 = String.class; URL url = new URL("file:/d:/workspace/");
  64. 64. 64 ClassLoader loader = new URLClassLoader(new URL[] {url}); Class clz2 = loader.loadClass("java.lang.String"); (A) clz1 與 clz2 參考同一實例 (B) clz1 與 clz2 參考不同實例 (C) 拋出 ClassNotFoundException (D) 拋出 NoClassDefException 答案:A  實作題 1. 你會有個物件,它是什麼類別的實例你一無所知,它實作了哪些介面你也不 知道,你只知道物件上會 quack()方法,該怎麼寫程式來呼叫執行這個方 法?
  65. 65. 65 第 16 章課後練習  實作題 1. 在 7.2.2 中曾實作一個 ClientQueue,對 ClientQueue 中 Client 新增 或移除有興趣的物件,可以實作 ClientListener,並向 ClientQueue 註冊。例如: public class ClientLogger implements ClientListener { public void clientAdded(ClientEvent event) { System.out.println(event.getIp() + " added..."); } public void clientRemoved(ClientEvent event) { System.out.println(event.getIp() + " removed..."); } } 請設計@ClientAdded 與@ClientRemoved 標註,可以標註在方法上: public class ClientLogger { @ClientAdded public void clientAdded(ClientEvent event) { System.out.println(event.getIp() + " added..."); } @ClientRemoved public void clientRemoved(ClientEvent event) { System.out.println(event.getIp() + " removed..."); } } 希 望 的 功 能 是 , 如 果 有 Client 加 入 ClientQueue , 會 呼 叫 @ClientAdded 標註的方法,如果有 Client 從 ClientQueue 移除,會呼叫 @ClientRemoved 標註的方法。 提示:你也許必須搭配 15.1.6 動態代理技術。

×