SlideShare uma empresa Scribd logo
1 de 65
Baixar para ler offline
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
(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
(B) Java SE API
(C) JVM
(D) 部署技術
答案:B、C、D
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
}
以下描述何者正確?
(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
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
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
第 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
提示: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
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
以下描述何者正確?
(A) 執行時顯示數字永不停止
(B) 執行時顯示數字 0 後停止
(C) 執行時顯示數字 5 後停止
(D) 執行時顯示數字直到 number 為 5 後停止
答案:D
 實作題
1. 如果有 m 與 n 兩個 int 變數,分別儲存 1000 與 495 兩個值,請使用程式
算出最大公因數。
2. 在三位的整數中,例如 153 可以滿足 13
+ 53
+ 33
= 153,這樣的數稱之為
阿姆斯壯(Armstrong)數,試以程式找出所有三位數的阿姆斯壯數。
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
以下描述何者正確?
(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
(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
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
4. 給予一個排序後的陣列,請撰寫程式可讓使用者在陣列中尋找指定數字,找
到就顯示索引值,找不到就顯示-1:
int[] number = {1, 10, 31, 33, 37, 48, 60, 70, 80};
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
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
答案: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
}
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
}
}
以下描述何者正確?
(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
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
第 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
(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
(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
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
//...
}
}
以下描述何者正確?
(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
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
件之字串描述時,可以如下:
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
第 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
}
以下描述何者正確?
(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
}
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
(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
}
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
(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
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
第 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
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
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
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
...
}
}
}
以下描述何者正確?
(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
super(message);
this.number = remain;
}
public int getNumber() {
return number;
}
}
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
(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
}
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
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
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
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
String[] words = {"RADAR","WARTER START","MILK
KLIM","RESERVERED","IWI"};
請撰寫程式,判斷字串陣列中有哪些字串,從前面看的字元順序,與從後面
看的字元順序是相同的。
提示:可使用 Deque。
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
(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
(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
第 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
});
空白部份指定哪些型態可以通過編譯?
(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
答案: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
第 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
(C) Glob
(D) Regex
答案:A
 實作題
1. 撰寫程式如下顯示本月日曆:
2. 撰寫程式可如下指定目錄與 Glob 模式,遞迴搜尋指定目錄與子目錄中符合
模式的檔案名稱,Glob 模式必須包括在""中以避免被主控台解釋為特定字
元(例如萬用字元'*')。
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
答案:A、C
 實作題
1. 請任選主題,使用 Swing 設計一款視窗遊戲(例如俄羅斯方塊),你也許需
要使用 Java 2D 在視窗上繪圖,可參考以下網址:
 http://download.oracle.com/javase/tutorial/2d/TOC.html
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
答案: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
(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
第 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
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
第 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 動態代理技術。

Mais conteúdo relacionado

Mais procurados

Research Report on Unilever Globally (By Seetal Daas and Group)
Research Report on Unilever Globally (By Seetal Daas and Group)Research Report on Unilever Globally (By Seetal Daas and Group)
Research Report on Unilever Globally (By Seetal Daas and Group)Seetal Daas
 
Yakult Operation Management simple presentation
Yakult Operation Management simple presentationYakult Operation Management simple presentation
Yakult Operation Management simple presentationRholin Bulan
 
Design Thinking and Innovation at Apple
Design Thinking and Innovation at AppleDesign Thinking and Innovation at Apple
Design Thinking and Innovation at AppleManas Tripathy
 
Starbucks - PESTLE ANALYSIS
Starbucks - PESTLE ANALYSISStarbucks - PESTLE ANALYSIS
Starbucks - PESTLE ANALYSISphongv
 
Apple V/s Samsung brand
Apple V/s Samsung brand Apple V/s Samsung brand
Apple V/s Samsung brand bhumijogani
 
Swot analysis for apple
Swot analysis for appleSwot analysis for apple
Swot analysis for appleEdwin Biy
 
Steve Jobs- Strategic Leadership
Steve Jobs- Strategic LeadershipSteve Jobs- Strategic Leadership
Steve Jobs- Strategic LeadershipSAPNA JHA
 
Apple Once the Worlds Most Valuable Company
Apple Once the Worlds Most Valuable CompanyApple Once the Worlds Most Valuable Company
Apple Once the Worlds Most Valuable CompanyMita Angela M. Dimalanta
 
Starbucks:Delivering Customer Service
Starbucks:Delivering Customer ServiceStarbucks:Delivering Customer Service
Starbucks:Delivering Customer ServiceDidem Şahin
 
Coca Cola Life - Market Development Strategy in UAE
Coca Cola Life - Market Development Strategy in UAE Coca Cola Life - Market Development Strategy in UAE
Coca Cola Life - Market Development Strategy in UAE Prateek Dhariwal
 
Mc donald final assignment on HRM Practices
Mc donald final assignment on HRM PracticesMc donald final assignment on HRM Practices
Mc donald final assignment on HRM Practiceskds_7o7
 
Apple company slide show..
Apple company slide show..Apple company slide show..
Apple company slide show..MelissaM727
 
Unilever introduction
Unilever introductionUnilever introduction
Unilever introductionFiverr
 
Apple Marketing strateies
Apple Marketing strateiesApple Marketing strateies
Apple Marketing strateiesParas Gupta
 
MGF2351 Tutorial 11 week 11
MGF2351 Tutorial 11 week 11MGF2351 Tutorial 11 week 11
MGF2351 Tutorial 11 week 11Kirti Mishra
 

Mais procurados (20)

Research Report on Unilever Globally (By Seetal Daas and Group)
Research Report on Unilever Globally (By Seetal Daas and Group)Research Report on Unilever Globally (By Seetal Daas and Group)
Research Report on Unilever Globally (By Seetal Daas and Group)
 
Yakult Operation Management simple presentation
Yakult Operation Management simple presentationYakult Operation Management simple presentation
Yakult Operation Management simple presentation
 
Design Thinking and Innovation at Apple
Design Thinking and Innovation at AppleDesign Thinking and Innovation at Apple
Design Thinking and Innovation at Apple
 
001 管制圖使用問答 SPC Chart Tips
001 管制圖使用問答 SPC Chart Tips001 管制圖使用問答 SPC Chart Tips
001 管制圖使用問答 SPC Chart Tips
 
Apple Istory
Apple IstoryApple Istory
Apple Istory
 
Starbucks - PESTLE ANALYSIS
Starbucks - PESTLE ANALYSISStarbucks - PESTLE ANALYSIS
Starbucks - PESTLE ANALYSIS
 
Apple V/s Samsung brand
Apple V/s Samsung brand Apple V/s Samsung brand
Apple V/s Samsung brand
 
Swot analysis for apple
Swot analysis for appleSwot analysis for apple
Swot analysis for apple
 
Steve Jobs- Strategic Leadership
Steve Jobs- Strategic LeadershipSteve Jobs- Strategic Leadership
Steve Jobs- Strategic Leadership
 
Apple Once the Worlds Most Valuable Company
Apple Once the Worlds Most Valuable CompanyApple Once the Worlds Most Valuable Company
Apple Once the Worlds Most Valuable Company
 
Mcdonalds Case study
Mcdonalds Case studyMcdonalds Case study
Mcdonalds Case study
 
Starbucks:Delivering Customer Service
Starbucks:Delivering Customer ServiceStarbucks:Delivering Customer Service
Starbucks:Delivering Customer Service
 
Coca Cola Life - Market Development Strategy in UAE
Coca Cola Life - Market Development Strategy in UAE Coca Cola Life - Market Development Strategy in UAE
Coca Cola Life - Market Development Strategy in UAE
 
Mc donald final assignment on HRM Practices
Mc donald final assignment on HRM PracticesMc donald final assignment on HRM Practices
Mc donald final assignment on HRM Practices
 
Unilever Profile
Unilever ProfileUnilever Profile
Unilever Profile
 
Apple company slide show..
Apple company slide show..Apple company slide show..
Apple company slide show..
 
Unilever introduction
Unilever introductionUnilever introduction
Unilever introduction
 
Apple Marketing strateies
Apple Marketing strateiesApple Marketing strateies
Apple Marketing strateies
 
MGF2351 Tutorial 11 week 11
MGF2351 Tutorial 11 week 11MGF2351 Tutorial 11 week 11
MGF2351 Tutorial 11 week 11
 
Apple case study
Apple case studyApple case study
Apple case study
 

Destaque

Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件Justin Lin
 
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDEJava SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDEJustin Lin
 
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論Justin Lin
 
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型Justin Lin
 
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論Justin Lin
 
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行APIJava SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行APIJustin Lin
 
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Java SE 7 技術手冊投影片第 05 章  - 物件封裝Java SE 7 技術手冊投影片第 05 章  - 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝Justin Lin
 
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計Justin Lin
 
從模組到類別
從模組到類別從模組到類別
從模組到類別Justin Lin
 
Java SE 7 技術手冊第六章草稿 - 何謂繼承?
Java SE 7 技術手冊第六章草稿 - 何謂繼承?Java SE 7 技術手冊第六章草稿 - 何謂繼承?
Java SE 7 技術手冊第六章草稿 - 何謂繼承?Justin Lin
 
Java SE 7 技術手冊第七章草稿 - 何謂介面?
Java SE 7 技術手冊第七章草稿 - 何謂介面?Java SE 7 技術手冊第七章草稿 - 何謂介面?
Java SE 7 技術手冊第七章草稿 - 何謂介面?Justin Lin
 
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出Justin Lin
 
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器Justin Lin
 
Java SE 7 技術手冊投影片第 08 章 - 例外處理
Java SE 7 技術手冊投影片第 08 章 - 例外處理Java SE 7 技術手冊投影片第 08 章 - 例外處理
Java SE 7 技術手冊投影片第 08 章 - 例外處理Justin Lin
 
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Justin Lin
 
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章  - 通用APIJava SE 7 技術手冊投影片第 12 章  - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用APIJustin Lin
 
Java SE 7 技術手冊第五章草稿 - 何謂封裝?
Java SE 7 技術手冊第五章草稿 - 何謂封裝?Java SE 7 技術手冊第五章草稿 - 何謂封裝?
Java SE 7 技術手冊第五章草稿 - 何謂封裝?Justin Lin
 
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型Justin Lin
 
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJava SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJustin Lin
 
Java SE 7 技術手冊投影片第 03 章 - 基礎語法
Java SE 7 技術手冊投影片第 03 章 - 基礎語法Java SE 7 技術手冊投影片第 03 章 - 基礎語法
Java SE 7 技術手冊投影片第 03 章 - 基礎語法Justin Lin
 

Destaque (20)

Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件
 
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDEJava SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
 
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
 
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
 
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
 
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行APIJava SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
 
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Java SE 7 技術手冊投影片第 05 章  - 物件封裝Java SE 7 技術手冊投影片第 05 章  - 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
 
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
 
從模組到類別
從模組到類別從模組到類別
從模組到類別
 
Java SE 7 技術手冊第六章草稿 - 何謂繼承?
Java SE 7 技術手冊第六章草稿 - 何謂繼承?Java SE 7 技術手冊第六章草稿 - 何謂繼承?
Java SE 7 技術手冊第六章草稿 - 何謂繼承?
 
Java SE 7 技術手冊第七章草稿 - 何謂介面?
Java SE 7 技術手冊第七章草稿 - 何謂介面?Java SE 7 技術手冊第七章草稿 - 何謂介面?
Java SE 7 技術手冊第七章草稿 - 何謂介面?
 
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
 
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
 
Java SE 7 技術手冊投影片第 08 章 - 例外處理
Java SE 7 技術手冊投影片第 08 章 - 例外處理Java SE 7 技術手冊投影片第 08 章 - 例外處理
Java SE 7 技術手冊投影片第 08 章 - 例外處理
 
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
 
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章  - 通用APIJava SE 7 技術手冊投影片第 12 章  - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用API
 
Java SE 7 技術手冊第五章草稿 - 何謂封裝?
Java SE 7 技術手冊第五章草稿 - 何謂封裝?Java SE 7 技術手冊第五章草稿 - 何謂封裝?
Java SE 7 技術手冊第五章草稿 - 何謂封裝?
 
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
 
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJava SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
 
Java SE 7 技術手冊投影片第 03 章 - 基礎語法
Java SE 7 技術手冊投影片第 03 章 - 基礎語法Java SE 7 技術手冊投影片第 03 章 - 基礎語法
Java SE 7 技術手冊投影片第 03 章 - 基礎語法
 

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

中心教员J2 Ee面试题
中心教员J2 Ee面试题中心教员J2 Ee面试题
中心教员J2 Ee面试题yiditushe
 
《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)jane2006
 
神州泰岳测试试题(笔试)
神州泰岳测试试题(笔试)神州泰岳测试试题(笔试)
神州泰岳测试试题(笔试)yiditushe
 
中心教员Java面试题1
中心教员Java面试题1中心教员Java面试题1
中心教员Java面试题1yiditushe
 
xwz 2010-10-31
xwz 2010-10-31xwz 2010-10-31
xwz 2010-10-31carlxwz
 
系統程式 -- 第 12 章
系統程式 -- 第 12 章系統程式 -- 第 12 章
系統程式 -- 第 12 章鍾誠 陳鍾誠
 
twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹twMVC
 
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版逸 張
 
[科科營]資工程式試作
[科科營]資工程式試作[科科營]資工程式試作
[科科營]資工程式試作nctutlc2013
 
計算機概論模擬40題_國營、研究所適用
計算機概論模擬40題_國營、研究所適用計算機概論模擬40題_國營、研究所適用
計算機概論模擬40題_國營、研究所適用逸 張
 
第01章 绪论(java版)
第01章  绪论(java版)第01章  绪论(java版)
第01章 绪论(java版)Yan Li
 
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答Justin Lin
 
HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享Chong-Kuan Chen
 
Android Studio NDK(JNI) + OpenCV 完整教學
Android Studio NDK(JNI) + OpenCV 完整教學Android Studio NDK(JNI) + OpenCV 完整教學
Android Studio NDK(JNI) + OpenCV 完整教學Wei-Xiang Wang
 
2006年招聘试题
2006年招聘试题2006年招聘试题
2006年招聘试题yiditushe
 
上海立派信息技术有限公司
上海立派信息技术有限公司上海立派信息技术有限公司
上海立派信息技术有限公司yiditushe
 

Semelhante a Java SE 7 技術手冊 - 課後練習解答 (20)

中心教员J2 Ee面试题
中心教员J2 Ee面试题中心教员J2 Ee面试题
中心教员J2 Ee面试题
 
《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)
 
神州泰岳测试试题(笔试)
神州泰岳测试试题(笔试)神州泰岳测试试题(笔试)
神州泰岳测试试题(笔试)
 
中心教员Java面试题1
中心教员Java面试题1中心教员Java面试题1
中心教员Java面试题1
 
xwz 2010-10-31
xwz 2010-10-31xwz 2010-10-31
xwz 2010-10-31
 
系統程式 -- 第 12 章
系統程式 -- 第 12 章系統程式 -- 第 12 章
系統程式 -- 第 12 章
 
Sun java
Sun javaSun java
Sun java
 
twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹
 
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
 
[科科營]資工程式試作
[科科營]資工程式試作[科科營]資工程式試作
[科科營]資工程式試作
 
計算機概論模擬40題_國營、研究所適用
計算機概論模擬40題_國營、研究所適用計算機概論模擬40題_國營、研究所適用
計算機概論模擬40題_國營、研究所適用
 
Test
TestTest
Test
 
第01章 绪论(java版)
第01章  绪论(java版)第01章  绪论(java版)
第01章 绪论(java版)
 
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
 
HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享
 
Android Studio NDK(JNI) + OpenCV 完整教學
Android Studio NDK(JNI) + OpenCV 完整教學Android Studio NDK(JNI) + OpenCV 完整教學
Android Studio NDK(JNI) + OpenCV 完整教學
 
2006年招聘试题
2006年招聘试题2006年招聘试题
2006年招聘试题
 
上海立派信息技术有限公司
上海立派信息技术有限公司上海立派信息技术有限公司
上海立派信息技术有限公司
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 

Mais de Justin Lin

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring BootJustin Lin
 
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityJustin Lin
 
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走Justin Lin
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMailJustin Lin
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Justin Lin
 
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫Justin Lin
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤Justin Lin
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTLJustin Lin
 
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSPJustin Lin
 
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Justin Lin
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理Justin Lin
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應Justin Lin
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletJustin Lin
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式Justin Lin
 
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題Justin Lin
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步Justin Lin
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能Justin Lin
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組Justin Lin
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換Justin Lin
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構Justin Lin
 

Mais de Justin Lin (20)

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
 
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
 
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
 
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTL
 
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSP
 
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
 
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構
 

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

  • 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 (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 (B) Java SE API (C) JVM (D) 部署技術 答案:B、C、D
  • 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 } 以下描述何者正確? (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 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 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 第 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 提示: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 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 以下描述何者正確? (A) 執行時顯示數字永不停止 (B) 執行時顯示數字 0 後停止 (C) 執行時顯示數字 5 後停止 (D) 執行時顯示數字直到 number 為 5 後停止 答案:D  實作題 1. 如果有 m 與 n 兩個 int 變數,分別儲存 1000 與 495 兩個值,請使用程式 算出最大公因數。 2. 在三位的整數中,例如 153 可以滿足 13 + 53 + 33 = 153,這樣的數稱之為 阿姆斯壯(Armstrong)數,試以程式找出所有三位數的阿姆斯壯數。
  • 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 以下描述何者正確? (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 (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 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};
  • 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 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 答案: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 } 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 } } 以下描述何者正確? (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 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 第 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 (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 (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 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 //... } } 以下描述何者正確? (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 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 件之字串描述時,可以如下: 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 第 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 } 以下描述何者正確? (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 } 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 (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 } 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 (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 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 第 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 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 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 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 ... } } } 以下描述何者正確? (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 super(message); this.number = remain; } public int getNumber() { return number; } }
  • 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 (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 } 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 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 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 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 String[] words = {"RADAR","WARTER START","MILK KLIM","RESERVERED","IWI"}; 請撰寫程式,判斷字串陣列中有哪些字串,從前面看的字元順序,與從後面 看的字元順序是相同的。 提示:可使用 Deque。
  • 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 (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 (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 第 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 }); 空白部份指定哪些型態可以通過編譯? (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 答案: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 第 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 (C) Glob (D) Regex 答案:A  實作題 1. 撰寫程式如下顯示本月日曆: 2. 撰寫程式可如下指定目錄與 Glob 模式,遞迴搜尋指定目錄與子目錄中符合 模式的檔案名稱,Glob 模式必須包括在""中以避免被主控台解釋為特定字 元(例如萬用字元'*')。
  • 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 答案:A、C  實作題 1. 請任選主題,使用 Swing 設計一款視窗遊戲(例如俄羅斯方塊),你也許需 要使用 Java 2D 在視窗上繪圖,可參考以下網址:  http://download.oracle.com/javase/tutorial/2d/TOC.html
  • 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 答案: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 (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 第 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 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 第 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 動態代理技術。