自訂異常,java自訂異常

來源:互聯網
上載者:User

自訂異常,java自訂異常

估計他們上完課就再也不玩了,自己那段時間上完課。也就基本上很少來了,主要是 沒有什麼記錄的習慣,奇怪的是,每每到了心情不好的時候,總會想要寫點什麼。

 

不管怎麼樣還是出去花錢學習了一下,這段經曆。嗯,很難評價,事實上如果不留下一筆,那麼的確沒有什麼學習的意義。

 

所以,李飛要一點兒一點兒扳過來。

 

出去學習以後發現一個事兒,那就是我真的沒有很聰明,接受知識,可能也沒我自詡的那麼快,記憶力也沒那麼好。所以要想成長,我真的要做的就是,勤奮,更加勤奮才行。

 

這天是袁海鵬老師授課。印象中10.13,因為是10.12走的。

 

今天講授的是自訂異常。

 

自訂異常的步驟:

1、建立一個類。繼承exception或者 runtimeException。

2、建構函式的書寫。

3、非法狀態下建立該類的對象。

樣本1:

package ExceptionPart;public class SelfDefinitionException extends Exception {        public SelfDefinitionException(String message){        super(message);    }        public static void main(String[] args) throws SelfDefinitionException{        throw new SelfDefinitionException("lifei");    }    }

 

 

運行結果:

Exception in thread "main" ExceptionPart.SelfDefinitionException: lifei
at ExceptionPart.SelfDefinitionException.main(SelfDefinitionException.java:10)

 

這樣好像沒什麼意思。什麼也有沒有做一樣,事實上,如果單獨看這個東西,確實什麼也不是。這樣需要考慮自訂異常是用來幹什麼的?就是遇到了問題,然後擲出問題。避免一些不合法的狀況發生。把一些在編譯環境下允許的東西以異常的形式報告給開發人員,從而更好地解決當前問題。

比如,我們往資料庫的年齡欄位儲存負數或值過大的數的時候,可能會在某一個未知的環節出錯。如果我們在開始填入的時候就規定了這個數的範圍的話,那麼後期維護的成本就會很低。

所以合理的邏輯是,如果某個數值不合乎要求,那麼就會出現異常。所以。我們不需要再主函數中直接報出異常。給一個條件。

if(年齡不合理){

  throw new AgeException("年齡不合理");

}

按照這個邏輯的話:

public class AgeException extends Exception {
  public AgeException(){
    super("年齡不合理異常");
  }
}

 

所以樣本2:

package ExceptionPart;//年齡異常處理類public class AgeException extends Exception {    //建構函式    public AgeException(){        //重寫        super("年齡不合理異常");    }}

 

package ExceptionPart;public class AgeExceptionTest {        public static void main(String[] args) throws AgeException {        //設定        int age = -5;        //檢測        if(age>150||age<0){            throw new AgeException();        }//【後來標記 ,第9行】        //輸出        System.out.println("my age is "+age);    }}

運行結果:

Exception in thread "main" ExceptionPart.AgeException: 年齡不合理異常
at ExceptionPart.AgeExceptionTest.main(AgeExceptionTest.java:9)

 

練習:

建立一個關於性別的自訂異常類,男女是合法的。

package ExceptionPart;public class GenderException extends Exception {        public GenderException() {        super("輸入的性別不符合規範");    }    public GenderException(String message){        super(message);    }}
package ExceptionPart;public class GenderExceptionTest {    public static void main(String[] args) throws GenderException {        String gender = "s";        if(!"男".equals(gender)&&!"女".equals(gender)){            throw new GenderException("性別的輸入不符合規範");        }        System.out.println("小明的性別是:"+gender);    }}

 

 

 

問題:

出了一個這樣的問題:並不知道 怎麼解決。

希望和小夥伴們一起探討一下:

問題來源:期望寫一個當前類的重載函數。然後根據年齡的數值來決定調用 使用哪一個語句進行輸出。

但是出現了這樣一個異常。

package ExceptionPart;public class AgeException1 extends Exception{    private final String NATIVETIPS = "當前年齡為負數";    private final String BIGTIPS = "當前年齡過大";    private static String result = "您的年齡不合法";    public AgeException1(int age){                if(age<0){            result=NATIVETIPS;        }        else if(age>150){            result = BIGTIPS;        }        System.out.println(age);        System.out.println(result);        super(result);//這裡編譯器 會報錯    }    public AgeException1(){        super(result);    }}

更改方式:

package ExceptionPart;public class AgeException1 extends Exception{    private final String NATIVETIPS = "當前年齡為負數";    private final String BIGTIPS = "當前年齡過大";    private static String result = "您的年齡不合法";    public AgeException1(int age){        super(result);//挪到這裡就沒有問題。        if(age<0){            result=NATIVETIPS;        }        else if(age>150){            result = BIGTIPS;        }        System.out.println(age);        System.out.println(result);        //把剛剛那句話拿上去,就沒有問題    }    public AgeException1(){        super(result);    }}

然後報的編譯錯誤是:

Constructor call must be the first statement in a constructor

猜想這句話應該翻譯為:建構函式的調用必須在一個建構函式中優先(首先)聲明。

當前類在建立的時候,優先調用父類的建構函式。所以不寫的話,就算了,寫就只能出現在第一行。然後優先調用。不寫的話,就優先,並且預設調用。

 

 

如有問題歡迎探討和斧正。BY Letben。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.