如果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("程式發生了其他的異常");
//輸出提示資訊
}
}
}