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雖然可以加至程式中,但無濟於事。