總網頁瀏覽量

2016年3月21日 星期一

[Java] SCJP 題庫 001


Given: 

1. public class Threads4{ 
2.          public static void main(String[] args){ 
3.                   new Threads4.go(); 
4.           } 
5.          public void go(){ 
6.                  Runnable r = new Runnable(){ 
7.                          public void run(){ 
8.                                   System.out.print("foo");  
9.                          } 
10.                }; 
11.               Thread t = new Thread(r); 
12.               t.start(); 
13.               t.start(); 
14.         } 
15.  } 

 
What is the result? 
   A. Compilation fails. 
   B. An exception is thrown at runtime. 
   C. The code executes normally and prints "foo"; 
   D. The code executes normally, but nothing is printed.
 
只是吹毛求疵了一下,
這個程是本身第3行應該要改成 
new Threads4().go();
 
不然會有編譯錯誤 
Threads4.java:12: error: cannot find symbol
                new Threads4.good();
                                       ^
  symbol:   class good
  location: class Threads4 
1 error


而以上都只是個人的吹毛求疵, 不是題目重點, 不然答案就是A了.

在程式中出現兩個 t.start();

編譯正確但是執行錯誤

fooException in thread "main"
java.lang.IllegalThreadStateException
        at java.lang.Thread.start(Thread.java:705)
        at ex_004_thread_start.go(ex_004_thread_start.java:13)
        at ex_004_thread_start.main(ex_004_thread_start.java:3)
 
 
陳富國網路資源 
http://192.192.246.169/~wells/wiki/index.php/SCJP_1.6%E7%89%88%E8%80%83%E9%A1%8C_001
答案給了E
說明為 一個執行緒只能啟動一次 (t.start()只能下一次),執行緒是物件,物件相關的動作發生問題是在執行時期產生例外,而不是編譯的錯誤。 
 
而不是跟B一樣嗎, 這部分可能就要考慮到  
https://www.javaworld.com.tw/jute/post/view?bid=17&id=276985

有提到因為題目錯誤, 不想使讀者誤解, 所以才另外寫下答案.
(這是我個人的歸納拉 XD)

沒有留言:

張貼留言