如果java提供的系統異常類型不能滿足程序設計的需求,那麼可以設計自己的異常類型。
從java異常類的結構層次可以看出,java類型的公共父類為Throwable.在程序運行中可能出現倆種問題:一種是由硬件系統或JVM導致的故障,java定義該故障為Error,這類問題是用戶程序不能夠處理的;另外一種問題是程序運行錯誤,java定義為Exception,這種情況下,可以通過程序設計調整來實現異常處理。
因此,用戶定義的異常類型必須是Throwable的直接或間接子類。我推薦大家的異常類型以Exception為直接父類。下面開始我們的自定義異常類之旅...
1、首先定義自己的異常類AgeOutOfBound
/**
* 自定義異常類
* */
public class AgeOutOfBound extends Exception {
public AgeOutOfBound() {
System.out.print("Sorry,age out of bound !");
}
}
2、定義一個類,根據參數值判斷是否拋出異常
/**
* 定義一個方法,根據參數值決定是否拋出異常
* */
public class AgeInput {
public static void checkAage(int age)throws AgeOutOfBound{ //用關鍵字throws指明調用此方法可能拋出的異常
if(age>0 && age<200){
System.out.print("right!");
}else{
System.out.println("---------------");
throw new AgeOutOfBound(); //拋出異常用關鍵字throw
}
}
}
3、
/**
* 測試類,如果有異常場則捕獲
* */
public class Demo {
public static void main(String[] args) {
int age = 100;
try {
AgeInput.checkAage(age);
} catch (AgeOutOfBound e) {
System.out.println("Are you rellly :" + age + " years old?");
}
}
}
運行結果:當age=100,輸入right
當age = 300,輸出
---------------
Sorry,age out of bound !Are you rellly :300 years old?
如有哪裡不懂,可以到這裡下載項目代碼
------------------------------------------分割線------------------------------------------
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2014年資料/9月/29日/Java 創建用戶異常類、將異常一直向上拋、 throw和throws的區別
下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm
------------------------------------------分割線------------------------------------------
補充:
下面說說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("程序發生了其他的異常");
//輸出提示信息
}
}
}
大話設計模式(帶目錄完整版) PDF+源代碼 http://www.linuxidc.com/Linux/2014-08/105152.htm
Java中介者設計模式 http://www.linuxidc.com/Linux/2014-07/104319.htm
Java 設計模式之模板方法開發中應用 http://www.linuxidc.com/Linux/2014-07/104318.htm
設計模式之 Java 中的單例模式(Singleton) http://www.linuxidc.com/Linux/2014-06/103542.htm