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));
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();