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