Given:



public class Whizlabs {

    public static void main(String[] args) {
        try {
            Double number = Double.valueOf("120D");
        } catch (NumberFormatException ex) {
        }
        System.out.println(number);
    }
}

What is the result?

A.

120

B.

120D

C. A NumberFormatException will be thrown.
D. Compilation fails due to error at line 5.
E. Compilation tails due to error at line 8.

題解

程式第5行,使用Double類的valueOf方法將字串轉成Double物件。

「120D」或是「120d」在Java中是正確的數值表示方式,表示為double型態的120。若為「120F」或是「120f」,則表示為float型態的120。若為「120」或是「120」,則表示為int型態的120。程式碼舉例如下:

int a = 120;
float b = 120f;
double c = 120d;

因此程式第5行會成功執行並產生Double物件,而不會拋出例外。但是在程式第8行,有用到number變數,但number變數只有在第4行開始的try程式區塊中被定義,有效範圍只有在try程式區塊中。因此程式第8行會因為沒有定義number,而發生編譯錯誤。