第十一題 

Given the following:

* d is valid, non-null date object
* df is a valid, non-null DateFormat object set to the current local

What outputs the current local's country name and the appropriate version of d's date?

What outputs the current local's country name and the appropriate version of d's date?

A. Locale loc = Locale.getLocal();
 System.out.println(loc.getDisplayCountry());

B. Locale loc = Locale.getDefault();
 System.out.println(loc.getDisplayCountry() + " " + df.format(d));

C. Locale loc = Locale.getLocal();
 System.out.println(loc.getDisplayCountry()+ " " + df.setDateFormat(d));

D. Locale loc = Locale.getDefault();
 System.out.println(loc.getDisplayCountry()+ " " + df.setDateFormat(d));

答案:

執行結果:台灣 201194 星期日 

題目範圍:日期、地區的使用

解析:

Locale 沒有getLocal() 方法,有getDefault() 方法
getDefault()
方法會去抓取JVM 的地區值,通常會在系統安裝JVM 時設定,也可以經由Locale.setDefault() 方法來設定

DateFormat 類別沒有setDateFormat() 方法,有format() 方法
會已設定好的格式來顯示傳入的時間,格式可以在宣告物件時就設定,例如:
    DateFormat df = DateFormat.getDateInstance(DateFormat.FULL,Locale.TAIWAN);

請參閱:第四題

 


 

第十二題: 

Given the following:

public class Hello implements Runnable {
   
public void run() {
        System.out.print("running");
    }

   
public static void main(String[] args) {
        Thread t =
new Thread(new Test());
        t.run();
        t.run();
        t.start();
    }
}

What is the result?

A. Compilation fails.
B. An exception is thrown at runtime
C. The code executes and prints "running" 
D. The code executes and prints "runningrunning" 
E. The code executes and prints "runningrunningrunning" 

答案:

執行結果:答案中 

題目範圍:Thread 執行緒

解析:

t.run(); 是使用一般函式呼叫,不管呼叫幾次都可以
t.start();
是透過Thread 本身的功能來呼叫run() 同時只能呼叫一次
一個執行緒只能Start 一次,就像一個火箭只能發射一次
如果程式碼是這樣寫:
t.run();
t.start();
t.start();
那麼就會出現java.lang.IllegalThreadStateException

 


 

第十三題 

Given the following:
public class Threads1 {
   
int x = 0;

   
public class Runner implements Runnable {
       
public void run() {
           
int current = 0;
           
for (int i = 0; i < 4; i++) {
                current = x;
                System.out.print(current + ", ");
                x = current + 2;
            }
        }
    }

   
public static void main(String[] args) {
       
new Threads1().go();
    }

   
public void go() {
        Runnable r1 =
new Runner();
       
new Thread(r1).start();
       
new Thread(r1).start();
    }
}

What is the result?

A. 0,2,4,4,6,8,10,6,
B. 0,2,4,6,8,10,2,4,
C. 0,2,4,6,8,10,12,14,
D. 0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14,
E. 0,2,4,6,8,10,12,14,0,2,4,6,8,10,12,14,

答案:AC

執行結果:(下列其一)
0, 0, 2, 4, 6, 2, 4, 6,
0, 2, 4, 6, 0, 2, 4, 6,
0, 0, 2, 2, 4, 4, 6, 6,
0, 2, 2, 4, 6, 8, 4, 6,
0, 2, 4, 4, 6, 8, 10, 6,
0, 2, 4, 6, 8, 10, 12, 14,


題目範圍:Thread 執行緒

解析:

這是同一個物件,以兩個執行緒來跑的情況
如果裡面的變數或方法沒有特別做的執行緒保護的話,兩個執行緒隨時都可以修改這個物件的變數
因為兩個執行緒有可能交替運作,交替的時間不同,會產生不同的結果

上面的執行結果只列出較有可能的不交替和只交替一次的結果

 


 

第十四題: 

Given the following:

    void waitForSignal() {

        Object obj = new Object();

        synchronized (Thread.currentThread()) {

            obj.wait();

            obj.notify();

        }

    }

Which statement is true?

A. This code may throw an InterruptedException
B. This code may throw an IllegalStateException
C. This code may throw a TimeOutException after ten minutes
D. This code will not compile unless "obj.wait()\" is replaced with "((Thread)obj).wait()"
E. Reversing the order of obj.wait() and obj.notify() may vcause this method to complete normally

答案:

執行結果:無 

題目範圍:Thread 執行緒

解析:

這題有兩個錯誤的地方,第一個錯誤是wait()方法要以try/catch包覆,或是擲出InterruptedException才行
因此答案就是因為缺少例外捕捉的 InterruptedException

第二個錯誤的地方是,synchronized 的目標與wait()方法的物件不相同,會有IllegalMonitorStateException ,不過InterruptedException 會先出現,所以這不是答案

最後正確的程式碼應該是這樣:
    void waitForSignal() {

        Object obj = new Object();

        synchronized (obj) {

            try {

                obj.wait();

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

            obj.notify();

        }

    }

 


 

第十四題: 

Given the following:

public class Test implements Runnable {
   
public static void main(String[] args) throws Exception {
        Thread t =
new Thread(new Test());
        t.start();
        System.out.print("Started");
        t.join();
        System.out.print("Complete");
    }

   
public void run() {
       
for (int i = 0; i < 4; i++) {
            System.out.print(i);
        }
    }
}

What can be a result?

A. Compilation fails
B. An exception is thrown at runtime
C. The code executes and prints "StartedComplete"
D. The code executes and prints "StartedComplete0123"
E. The code executes and prints "Started0123Complete"

答案:

執行結果:答案中 

題目範圍:Thread 執行緒

解析:

join() 方法的正確用法
即使start() 方法已經被呼叫,但是並不會立即被執行,而是進入排隊
使用了t.join() 就是要等t 執行緒結束後才繼續

arrow
arrow
    文章標籤
    JAVA SCJP 考試
    全站熱搜
    創作者介紹
    創作者 yaya741228 的頭像
    yaya741228

    來喝杯JAVA咖啡

    yaya741228 發表在 痞客邦 留言(1) 人氣()