【摘 要】Java語言擁有強大的異常處理機制,正確地使用好異常處理可以增強程序的健壯性和穩(wěn)定性,本文對Java異常引起的原因,對異常處理機制的三個重要環(huán)節(jié)進(jìn)行了深入的探討,最后通過一個實例來說明Java語言的異常處理的具體應(yīng)用。
【關(guān)鍵詞】Java語言;異常處理;應(yīng)用
0.引言
Java異常是描述在代碼段中發(fā)生的運行出錯情況的對象。程序中的錯誤可能來自于如下兩個方面問題:編譯錯誤和運行錯誤。編譯錯誤是由于所編寫的程序存在語法問題,未能通過由源代碼到目標(biāo)代碼的編譯過程而產(chǎn)生的錯誤,它將由Java語言的編譯系統(tǒng)負(fù)責(zé)檢測和報告;運行錯誤是在程序的運行過程中產(chǎn)生的錯誤。在Java語言中,提供了一種獨特的處理異常的機制,通過這種異常處理機制來處理程序中出現(xiàn)的錯誤,從而提高程序的容錯性,使開發(fā)出來的程序更為健壯。
1.Java異常類的種類及引起異常的原因
1.1 Java異常類的種類
Java異常類的種類可分成兩大類:(1)Error類:指的是Java運行環(huán)境出現(xiàn)的錯誤或系統(tǒng)錯誤,這些錯誤一般是很嚴(yán)重的錯誤,即使捕捉到也無法處理,由Java虛擬機生成并拋出,包括系統(tǒng)崩潰、動態(tài)鏈接失敗、虛擬機錯誤等,在Java程序中不做處理。(2)Exception類:指一些可以被捕獲且可能恢復(fù)的異常情況,是一般程序中可預(yù)知的問題。
1.2 Java異常引起原因
Java程序在運行過程中,可能會運行到非正常的執(zhí)行狀態(tài),這些狀態(tài)可能是由以下原因引起的:第一種情況:表達(dá)式的計算違反了Java 語言的規(guī)則,例如除法運算過程中被整數(shù)為0;在載入或鏈接Java 程序時出錯;超出了某些資源限制,例如使用了太多的內(nèi)存。
第二種情況,Java 程序代碼中的throw 語句被執(zhí)行。第三種情況,異步異常發(fā)生。異步異常的原因可能有:(1)Thread的stop方法被調(diào)用。(2)Java虛擬機內(nèi)部錯誤發(fā)生。
2.Java中異常處理機制的三個重要環(huán)節(jié)
2.1拋出異常
拋出異常就是程序設(shè)計時當(dāng)前代碼中遇到了一個不知道怎么處理的情況,在程序代碼中需要創(chuàng)建一個異常來將這個錯誤描述清楚,并且將這個異常拋出。異常被拋出之后面臨兩個路可走:首先是異常被捕捉并被處理,其次是讓方法繼續(xù)拋出這個異常。
拋出異常的方式有兩種:
(1)在方法代碼中使用throw關(guān)鍵字來拋出實例化的異常對象。
(2)在方法聲明中使用throws關(guān)鍵字拋出方法代碼中throw關(guān)鍵字拋出的異常對象。
2.2傳遞異常
異常實例在方法代碼中使用throw關(guān)鍵字被拋出后,如果是throws關(guān)鍵字后面的異常類列表的某個類型的實例,則方法將繼續(xù)拋出這個異常,異常繼續(xù)傳遞給方法的調(diào)用者,直到被處理掉或到達(dá)main()方法,異常傳遞main()方法之后,就會被Java平臺處理掉。
2.3處理異常
處理異常就是根據(jù)異常類型,提供不同的catch語句進(jìn)行處理,Java異常處理機制會將異常類型傳遞給匹配的catch語句,然后catch語句就可以根據(jù)異常對象的信息,具體問題分析,進(jìn)行相應(yīng)的補救措施,使程序可以繼續(xù)運行下去。
Java異常處理機制采用以下三種方法來處理代碼中產(chǎn)生的異常實例:
(1)try...catch語句捕獲并處理異常,使用try…catch語句處理異常可以分為以下兩種方式:
1)多類異常,分類處理;2)多類異常,一并處理。
語法格式如下:
Try{
異常代碼 //根據(jù)異常類型,提供不同的catch語句分類進(jìn)行處理
}catch(Exception1 e){
處理方法1
}catch(Exception2 e){
處理方法2
}
1)語法核心:使用try語句標(biāo)記出可能異常的代碼塊,使用catch語句將這些異常按匹配規(guī)則進(jìn)行處理。
2)匹配規(guī)則:異常實例的類型是catch語句的異常類型或是其子類,若一個catch語句的類型是Throwable類型,則可以用它來處理try語句塊中拋出的所有異常。
(2)try…catch…finally語句塊處理異常,其中finally語句塊在正常情況下都會被執(zhí)行,唯一不被執(zhí)行的情況是方法執(zhí)行了System.exit()方法。若一個異常沒有被處理掉,在拋出之前會先finally之后再被拋出,即使在catch語句中使用return來結(jié)束程序,finally執(zhí)行完后才返回return。Finally語句通常用來釋放程序所占用的資源,如數(shù)據(jù)庫查詢異常的時候,釋放JDBC連接等。
語法格式如下:
try{
異常代碼
}catch(Exception e){
處理方法
}finally{
必須要執(zhí)行的代碼
}
(3)用throw語句處理異常,對于處理不了的異常或者要轉(zhuǎn)型的異常,在方法的聲明處通過throws關(guān)鍵字拋出異常或在代碼中用throw關(guān)鍵字來拋出異常對象。
語法格式如下:
Public static void 方法名(參數(shù))throws 異常對象
If 語句{
throw 異常對象;
}
3.Java異常處理機制在應(yīng)用程序中的具體應(yīng)用
本例設(shè)計一個應(yīng)用程序完成課程成績查詢與輸出工作,在一個數(shù)組中存儲一個學(xué)生的2門課成績,從鍵盤輸入要選擇查詢的課程代碼(1~2),輸出對應(yīng)的課程名稱和成績。為防止用戶輸入輸入數(shù)據(jù)時可能發(fā)生的異常情況,在程序設(shè)計時特設(shè)計了異常處理過程。
3.1應(yīng)用程序主要代碼
import java.util.InputMismatchException;
import java.util.Scanner;
public class four {
public static void main(String[] args){
int[] classScore={82,87,92};//聲明一個數(shù)組且初始化值
Scanner input=new Scanner(System.in);//新建一個鍵盤輸入對象
System.out.println(\"請輸入要查詢的課程代碼:\");try{
int i=input.nextInt(); //輸入一個整數(shù)
int result=score[i-1];
System.out.println(\"課程名稱\t成績\");
if(i==201)//課程代碼判斷
System.out.println(\"大學(xué)語文:\t\");
else if(i==202)
System.out.println(\"Android應(yīng)用開發(fā):\t\");
System.out.println(result);//輸出課程的成績
}catch(InputMismatchException e){//異常捕獲及處理
System.out.println(\"輸入課程代碼不正確!\");
}catch(ArrayIndexOutOfBoundsException e){
System.out.println(\"數(shù)組下標(biāo)越界!\");//異常捕獲及處理
}catch(Exception e){
System.out.println(\"程序產(chǎn)生異常,原因為:\"+e);
}finally{
System.out.println(\"程序結(jié)束!\");
}
}
}
3.2應(yīng)用程序異常處理分析
在這個應(yīng)用程序中,程序開發(fā)人員設(shè)計了三個catch語句來對可能的異常進(jìn)行處理,增強程序的健壯性。異常處理如下:
(1)能夠自動判斷輸入數(shù)據(jù)是不是合法的數(shù)字?jǐn)?shù)據(jù),如果不是,第一個catch語句將捕獲“InputMismatchException”異常,中止程序運行,給出提示信息:“輸入不正確,請檢查!”。
(2)能夠自動判斷輸入的數(shù)據(jù)是否超出了范圍,超出了范圍會導(dǎo)致此程序中數(shù)組下標(biāo)越界,第二個catch語句將捕獲到“ArrayIndexOut
OfBoundsException”異常,中止程序運行,并給出提示信息:“數(shù)組下標(biāo)越界!”。
(3)其他異常檢測,本例中通過“Exception”語句,來捕獲上面兩種之外情況外的其他異常,如果發(fā)生了其他的異常,并給出提示信息:“程序產(chǎn)生異常,原因為:+e”。
4.小結(jié)
異常處理機制是Java語言的重要機制,正確、合理地使用異常處理可以增強程序的可靠性和健壯性。本文從“什么是異常”入手,分析了Java異常引起的原因,對異常處理機制的三個重要環(huán)節(jié)進(jìn)行了較深入的探討,最后以一個簡單的應(yīng)用程序為例,分析了Java語言的異常處理過程,使我們清楚到看到Java語言強大的異常處理機制。
異常處理機制是一種安全高效的編程策略,是開發(fā)應(yīng)用程序必不可少的部分,但在應(yīng)用程序開發(fā)初期往往容易被忽略。 因此,做為一個合格的Java程序員來說,應(yīng)該充分掌握J(rèn)ava語言的異常處理機制,在程序開發(fā)過程中盡可能的控制異常的發(fā)生,盡可能控制拋出大量的異常。
【參考文獻(xiàn)】
[1]丁學(xué)鈞,溫秀梅.基于Delphi的異常處理機制及其應(yīng)用研究[J].福建電腦,2005.7.
[2]耿祥義.Java基礎(chǔ)教程(第3版)[M].北京:清華大學(xué)出版社,2012.5.