Given the code fragment:



class X {
    public void printFileContent() {
        /* code goes here */
        throw new IOException();
    }
}
public class Test {
    public static void main(String[] args) {
        X xobj = new X();
        xobj.printFileContent();
    }
}

Which two modifications should you make so that the code compiles successfully?

A. Replace line 8 with:

public static void main(String[] args) throws Exception {

B. Replace line 10 with:

try {
    xobj.printFileContent();
} catch (Exception e) {
} catch (IOException e) {
}
C. Replace line 2 with:
public void printFileContent() throws IOException {
D. Replace line 4 with:
throw IOException("Exception raised");
E. At line 11, insert
throw new IOException();

題解

第5行在X類別的「printFileContent」方法中拋出了新的「IOException」例外,IOException是需要檢查的例外(checked exception),因此必須要撰寫程式去處理它。

由於「printFileContent」方法中目前並沒有任何處理「IOException」的方式,因此可以利用選項C,將「printFileContent」方法中所產生的「IOException」往外拋出。選項D缺少了「new」運算子來實體化出IOException物件,但就算有「new」運算子也無濟於事。

將「IOException」從「printFileContent」方法拋出後,其它有使用到「printFileContent」方法的地方就必須要去處理這個「IOException」,因此可以利用選項A,繼續將「IOException」再從「main」方法往外拋出。選項B的try-catch用法是錯的,若把「Exception」和「IOException」調換,或是移除掉其中一組catch,才會是正確的。

選項E雖然可以加至程式中,但無濟於事。