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