Java 建立使用者異常類、將異常一直向上拋、 throw和throws的區別

高傑才_Android發表於2013-11-09

如果java提供的系統異常型別不能滿足程式設計的需求,那麼可以設計自己的異常型別。

從java異常類的結構層次可以看出,java型別的公共父類為Throwable.在程式執行中可能出現倆種問題:一種是由硬體系統或JVM導致的故障,java定義該故障為Error,這類問題是使用者程式不能夠處理的;另外一種問題是程式執行錯誤,java定義為Exception,這種情況下,可以通過程式設計調整來實現異常處理。

因此,使用者定義的異常型別必須是Throwable的直接或間接子類。我推薦大家的異常型別以Exception為直接父類。下面開始我們的自定義異常類之旅...

 

1、首先定義自己的異常類AgeOutOfBound

 1  
 2 
 3 /**
 4 * 自定義異常類
 5 * */
 6 public class AgeOutOfBound extends Exception {
 7 
 8 public AgeOutOfBound() {
 9 System.out.print("Sorry,age out of bound !");
10 }
11 }

2、定義一個類,根據引數值判斷是否丟擲異常

 1 /**
 2  * 定義一個方法,根據引數值決定是否丟擲異常
 3  * */
 4 public class AgeInput {
 5     public static void checkAage(int age)throws AgeOutOfBound{    //用關鍵字throws指明呼叫此方法可能丟擲的異常
 6         if(age>0 && age<200){
 7             System.out.print("right!");
 8         }else{
 9             System.out.println("---------------");
10             throw new AgeOutOfBound();        //丟擲異常用關鍵字throw
11         }
12     }
13 }

3、

 1 /**
 2  * 測試類,如果有異常場則捕獲
 3  * */
 4 public class Demo {
 5 
 6     public static void main(String[] args) {
 7         int age = 100;
 8         try {
 9             AgeInput.checkAage(age);
10         } catch (AgeOutOfBound e) {
11              System.out.println("Are you rellly :" + age + " years old?");
12         }
13     }
14 
15 }

執行結果:當age=100,輸入right

    當age = 300,輸出

    ---------------
    Sorry,age out of bound !Are you rellly :300 years old?

如有哪裡不懂,可以到這裡下載專案程式碼

http://download.csdn.net/detail/gaojiecaiandroid/6525621

補充:

下面說說throw和throws的區別

throws關鍵字通常被應用在宣告方法時,用來指定可能丟擲的異常。多個異常可以使用逗號隔開。當在主函式中呼叫該方法時,如果發生異常,就會將異常拋給指定異常物件。如下面例子所示:
public class Shoot { 建立類
static void pop() throws NegativeArraySizeException {
//定義方法並丟擲NegativeArraySizeException異常
int [] arr = new int[-3];//建立陣列
}
public static void main(String[] args) {//主方法
try {
pop(); //呼叫pop()方法
} catch (NegativeArraySizeException e) {
System.out.println("pop()方法丟擲的異常");//輸出異常資訊
}
}
}

2、throw關鍵字通常用在方法體中,並且丟擲一個異常物件。程式在執行到throw語句時立即停止,它後面的語句都不執行。通過throw丟擲異常後,如果想在上一級程式碼中來捕獲並處理異常,則需要在丟擲異常的方法中使用throws關鍵字在方法宣告中指明要跑出的異常;如果要捕捉throw丟擲的異常,則必須使用try—catch語句。舉例如下:
class MyException extends Exception { //建立自定義異常類
String message; //定義String型別變數
public MyException(String ErrorMessagr) { //父類方法
message = ErrorMessagr;
}
public String getMessage(){ //覆蓋getMessage()方法
return message;
}
}
public class Captor { //建立類
static int quotient(int x,int y) throws MyException{//定義方法丟擲異常
if(y < 0){ //判斷引數是否小於0
throw new MyException("除數不能是負數");//異常資訊
}
return x/y;//返回值
}
public static void main(String args[]){ //主方法
try{ //try語句包含可能發生異常的語句
int result = quotient(3,-1);//呼叫方法quotient()
}catch (MyException e) { //處理自定義異常
System.out.println(e.getMessage()); //輸出異常資訊
}
catch (ArithmeticException e) {
//處理ArithmeticException異常
System.out.println("除數不能為0");//輸出提示資訊
}
catch (Exception e) { //處理其他異常
System.out.println("程式發生了其他的異常");
//輸出提示資訊
}
}
}

相關文章