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

4,779 views
4,641 views

Published on

Java SE 7 技術手冊

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,779
On SlideShare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
111
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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 動態代理技術。

×