View the exhibit.
class MissingInfoException extends Exception {
}
class AgeOutofRangeException extends Exception {
}
class Candidate {
String name;
int age;
Candidate(String name, int age) throws Exception {
if (name == null) {
throw new MissingInfoException();
} else if (age <= 10 || age >= 150) {
throw new AgeOutofRangeException();
} else {
this.name = name;
this.age = age;
}
}
public String toString() {
return name + " age: " + age;
}
}
Given the code fragment:
public class Test {
public static void main(String[] args) {
Candidate c = new Candidate("James", 20);
Candidate c1 = new Candidate("Williams", 32);
System.out.println(c);
System.out.println(c1);
}
}
Which change enables the code to print the following?
James age: 20
Williams age: 32
Williams age: 32
A.
Replacing line 5 with
public static void main (String [] args) throws MissingInfoException, AgeOutofRangeException {
B.Replacing line 5 with
public static void main (String [] args) throws.Exception {
C.Enclosing line 6 and line 7 within a try block and adding:
catch (MissingInfoException e1) { //code goes here
}
catch (AgeOutofRangeException e2) {//code goes here
}
catch(Exception e3) { //code goes here
}
D.Enclosing line 6 and line 7 within a try block and adding:
catch (MissingInfoException e2) { //code goes here
}
catch (AgeOutofRangeException e3) {//code goes here
}
題解
原本題目提供的程式會在第6行和第7行出現編譯錯誤,原因在於Candidate的物件有拋出Exception。由於Exception是需要檢查的例外(checked exception),因此必須要撰寫程式去處理它。
選項A,只讓main方法拋出MissingInfoException和AgeOutofRangeException是不夠的,必須要拋出Exception才行。
選項B,throws的用法錯誤。
選項C,有catch到Exception,正確選項。
選項D,只讓try-catch接住MissingInfoException和AgeOutofRangeException是不夠的,必須要接住Exception才行。