頁:
[1]
try catch問題求解
請高手協助一下此題,我已經將例外物件try...catch,但還是無法通過編譯,謝謝
public class Question {
public static void main(String[] args) {
try{
Candidate c1 = new Candidate("James", 20);
Candidate c2 = new Candidate("Williams", 32);
System.out.println(c1);
System.out.println(c2);
}catch(MissingInfoException e1){
}catch(AgeOutofRangeException e2){
}
}
}
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;
}
}
@Override
public String toString(){
return name + ", age: " + age;
}
}
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div> 你拋出的是MissingInfoException和AgeOutofRangeException呀~
要不改成
Candidate(String name, int age) throws MissingInfoException, AgeOutofRangeException
不然就是你在上面要catch(Exception e3) 你沒catch到啊,所以會編譯會無法通過,你Candidate 丟出的是exception,但你在 public static void main 這個method 只有catch MissingInfoException 和 AgeOutofRangeException 並沒有catch exception 所以會出錯。他只會看 Candidate(String name, int age) throws Exception 而不會看裡面時寄丟的throw new MissingInfoException 或 throw new AgeOutofRangeException foneasion 發表於 2016-7-14 09:11 PM static/image/common/back.gif
你拋出的是MissingInfoException和AgeOutofRangeException呀~
要不改成
了解,JAVA還有很多東西我還須學習
感謝您的回覆,非常感謝 22616846 發表於 2016-7-14 09:26 PM static/image/common/back.gif
你沒catch到啊,所以會編譯會無法通過,你Candidate 丟出的是exception,但你在 public static void main ...
了解,對於例外處理的觀念我還會繼續加強
感謝您的回覆,非常感謝<br><br><br><br><br><div></div> 補充一下好了,你的觀念錯不是錯在 Exception,而是在繼承跟多型上面,你沒有搞清楚。
你可以 catch super class,讓它來往下抓,但你不能用 sub class 來往上抓。
這是多型的最基本概念。
class MissingInfoException extends Exception{}
你可以用 Exception 來抓丟出 MissingInfoException 的異常。
但你的 code 卻寫反了,你丟出 Exception 卻想用 MissingInfoException 來抓。
其實這種東西不用背,想一下就懂了,Exception 是上層,它被寫出來的時候,這世上根本沒有 MissingInfoException,它怎麼會認得?
物件導向的精神就是「邏輯化」,基本上,大部份的物件導向特性都可以「合理的」解釋,就跟吃飯喝水一樣,真正的搞懂他的理由,你就不會背的很辛苦了。...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>
頁:
[1]