查看完整版本: try catch問題求解
頁: [1]

1006910211 發表於 2016-7-13 11:40 PM

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>

foneasion 發表於 2016-7-14 09:11 PM

你拋出的是MissingInfoException和AgeOutofRangeException呀~

要不改成
Candidate(String name, int age) throws MissingInfoException, AgeOutofRangeException

不然就是你在上面要catch(Exception e3)

22616846 發表於 2016-7-14 09:26 PM

你沒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

1006910211 發表於 2016-7-15 10:41 AM

foneasion 發表於 2016-7-14 09:11 PM static/image/common/back.gif
你拋出的是MissingInfoException和AgeOutofRangeException呀~

要不改成


了解,JAVA還有很多東西我還須學習
感謝您的回覆,非常感謝

1006910211 發表於 2016-7-15 10:42 AM

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>

Lak4CYUT 發表於 2016-7-16 05:34 PM

補充一下好了,你的觀念錯不是錯在 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]