Java異常的概念和分類
java異常是java提供的用于處理程序中錯誤的一種機制。
所謂錯誤是指在程序運行的過程中發生的一些異常事件(如:除0溢出,數組下標越界,所要讀取的文件不存在)。
設計良好地程序應該在程序異常發生時提供處理這些錯誤的方法,使得程序不會因為異常的發生而阻斷或產生不可預見的結果。
Java程序的執行過程中如出現異常事件,可以生成一個異常類對象,該異常對象封裝了異常事件的信息,并將被提交給java運行時系統,這個過程稱為拋出(throw)異常。
當Java運行時系統接收到異常對象時,會尋找能處理這一異常的代碼并把當前異常對象交給其處理,這一過程稱為捕獲(catch)異常。
try里面放的是有可能發生錯誤的語句,catch里面放的是發生異常之后采取的措施。
異常的分類:
Error:稱為錯誤,由Java虛擬機生成并拋出,包括動態鏈接失敗,虛擬機錯誤等,程序對其不做處理。
Exception:所有異常類的父類,其子類對應了各種各樣的可能出現的異常事件,一般需要用戶顯示的聲明或捕獲。
Runtime Exception:一類特殊的異常,如被0除、數組下標超范圍等,其產生比較頻繁,處理麻煩,如果顯示的聲明或捕獲將會對程序可讀性和運行效率影響很大。因此由系統自動檢測并將它們交給缺省的異常處理程序(用戶可不必對其處理)。
其實異常部分主要講的就是五個關鍵字:try、catch、finally、throw、throws。
try語句:
try{……}語句制定了一段代碼,這段代碼就是一次鋪貨并處理例外的范圍。在執行過程中,該段代碼可能會產生并拋出一種或幾種類型的異常對象,它后面的catch語句要分別對這些異常做相應的處理。如果沒有例外發生,所有的catch代碼段都被略過不執行。
catch語句:
在catch語句塊中是對異常進行處理的代碼,每個try語句塊可以伴隨一個或多個catch語句,用于處理可能產生的不同類型的異常對象。
在catch中聲明的異常對象(catch(SomeException e))封裝了異常事件發生的信息,在catch語句塊中可以使用這個對象的一些方法獲取這些信息。
例如:getMessage()方法,用來得到有關異常事件的信息。
printStackTrace()方法,用來跟蹤異常事件發生時執行堆棧的內容。
finally語句:
finally語句為異常處理提供一個統一的出口,使得在控制流程轉到程序的其他部分以前,能夠對程序的狀態做統一的管理。
無論try所指定的程序塊中是否拋出例外,finally所指定的代碼都要執行。
通常在finally語句中可以進行資源的清除工作,如:
1)關閉打開的文件
2)刪除臨時文件
3)……
其中throw和throws的區別:
1、throws關鍵字通常被應用在聲明方法時,用來指定可能拋出的異常。多個異常可以使用逗號隔開。當在住函數中調用該方法時,如果發生異常,就會將異常拋給指定異常對象。
例如:
<SPAN style="FONT-SIZE: 18px">public class test {
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()方法拋出的異常");//輸出異常信息
}
}
}</SPAN>
2、throw關鍵字通常用在方法體中,并且拋出一個異常對象。程序在執行到throw語句時立即停止,它后面的語句都不執行。通常throw拋出異常后,如果想在上一級代碼中來捕獲并處理異常,則需要在拋出異常的方法中使用throws關鍵字在方法聲明中指明要拋出的異常;如果要捕獲throw拋出的異常,則必須使用try{}catch{}語句。
例如:
<SPAN style="FONT-SIZE: 18px">public class MyException extends Exception{//創建自定義異常類
String message;//定義String類型變量
public MyException(String ErrorMessage){//父類方法
message=ErrorMessage;
}
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{
int result=quotient(3,-1);
}catch(MyException e){//處理自定義異常
System.out.println(e.getMessage());//輸出異常信息
}catch(ArithmeticException e){
//輸出ArithmeticException算術異常
System.out.println("除數不能為0");//輸出提示信息
}catch(Exception e){//處理其他異常
System.out.println("程序發生了其他異常");
}
}
}</SPAN>
自定義異常:
使用自定義異常一般有如下步驟:
1、通過繼承java.lang.Exception類聲明自己的異常類。
2、在方法適當的位置生成自定義異常的實例,并用throw語句拋出。
3、在方法的聲明部分用throws語句聲明該方法可能拋出的異常。
異常總結:
1、一個圖
2、五個關鍵字
3、先捕獲小的異常,在捕獲大的異常
4、異常和重寫的關系
java異常是java提供的用于處理程序中錯誤的一種機制。
所謂錯誤是指在程序運行的過程中發生的一些異常事件(如:除0溢出,數組下標越界,所要讀取的文件不存在)。
設計良好地程序應該在程序異常發生時提供處理這些錯誤的方法,使得程序不會因為異常的發生而阻斷或產生不可預見的結果。
Java程序的執行過程中如出現異常事件,可以生成一個異常類對象,該異常對象封裝了異常事件的信息,并將被提交給java運行時系統,這個過程稱為拋出(throw)異常。
當Java運行時系統接收到異常對象時,會尋找能處理這一異常的代碼并把當前異常對象交給其處理,這一過程稱為捕獲(catch)異常。
try里面放的是有可能發生錯誤的語句,catch里面放的是發生異常之后采取的措施。
異常的分類:
Error:稱為錯誤,由Java虛擬機生成并拋出,包括動態鏈接失敗,虛擬機錯誤等,程序對其不做處理。
Exception:所有異常類的父類,其子類對應了各種各樣的可能出現的異常事件,一般需要用戶顯示的聲明或捕獲。
Runtime Exception:一類特殊的異常,如被0除、數組下標超范圍等,其產生比較頻繁,處理麻煩,如果顯示的聲明或捕獲將會對程序可讀性和運行效率影響很大。因此由系統自動檢測并將它們交給缺省的異常處理程序(用戶可不必對其處理)。
其實異常部分主要講的就是五個關鍵字:try、catch、finally、throw、throws。
try語句:
try{……}語句制定了一段代碼,這段代碼就是一次鋪貨并處理例外的范圍。在執行過程中,該段代碼可能會產生并拋出一種或幾種類型的異常對象,它后面的catch語句要分別對這些異常做相應的處理。如果沒有例外發生,所有的catch代碼段都被略過不執行。
catch語句:
在catch語句塊中是對異常進行處理的代碼,每個try語句塊可以伴隨一個或多個catch語句,用于處理可能產生的不同類型的異常對象。
在catch中聲明的異常對象(catch(SomeException e))封裝了異常事件發生的信息,在catch語句塊中可以使用這個對象的一些方法獲取這些信息。
例如:getMessage()方法,用來得到有關異常事件的信息。
printStackTrace()方法,用來跟蹤異常事件發生時執行堆棧的內容。
finally語句:
finally語句為異常處理提供一個統一的出口,使得在控制流程轉到程序的其他部分以前,能夠對程序的狀態做統一的管理。
無論try所指定的程序塊中是否拋出例外,finally所指定的代碼都要執行。
通常在finally語句中可以進行資源的清除工作,如:
1)關閉打開的文件
2)刪除臨時文件
3)……
其中throw和throws的區別:
1、throws關鍵字通常被應用在聲明方法時,用來指定可能拋出的異常。多個異常可以使用逗號隔開。當在住函數中調用該方法時,如果發生異常,就會將異常拋給指定異常對象。
例如:
<SPAN style="FONT-SIZE: 18px">public class test { 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()方法拋出的異常");//輸出異常信息 } } }</SPAN> |
2、throw關鍵字通常用在方法體中,并且拋出一個異常對象。程序在執行到throw語句時立即停止,它后面的語句都不執行。通常throw拋出異常后,如果想在上一級代碼中來捕獲并處理異常,則需要在拋出異常的方法中使用throws關鍵字在方法聲明中指明要拋出的異常;如果要捕獲throw拋出的異常,則必須使用try{}catch{}語句。
例如:
<SPAN style="FONT-SIZE: 18px">public class MyException extends Exception{//創建自定義異常類
|
自定義異常:
使用自定義異常一般有如下步驟:
1、通過繼承java.lang.Exception類聲明自己的異常類。
2、在方法適當的位置生成自定義異常的實例,并用throw語句拋出。
3、在方法的聲明部分用throws語句聲明該方法可能拋出的異常。
異常總結:
1、一個圖
2、五個關鍵字
3、先捕獲小的異常,在捕獲大的異常
4、異常和重寫的關系