金英華 孫麗
摘 要:程序錯(cuò)誤包括兩種:語法錯(cuò)誤(編譯錯(cuò)誤)和運(yùn)行錯(cuò)誤(異常)。語法錯(cuò)誤是指由于輸入程序時(shí)的語句錯(cuò)誤,導(dǎo)致程序無法通過編譯系統(tǒng)而產(chǎn)生的錯(cuò)誤。Java語言語法中關(guān)鍵字或者標(biāo)識(shí)符要區(qū)分大小寫,以及要正確地輸入Java語句,編寫程序設(shè)計(jì)時(shí)要遵守這些規(guī)則,否則編譯時(shí)就會(huì)出現(xiàn)錯(cuò)誤,需要程序員調(diào)試修正。運(yùn)行錯(cuò)誤是程序在運(yùn)行過程中產(chǎn)生的錯(cuò)誤, 數(shù)組下標(biāo)不能越界,除數(shù)不能為零和引用文件無法找到等等,這類錯(cuò)誤屬于是運(yùn)行錯(cuò)誤, 異常處理就是針對(duì)這些運(yùn)行錯(cuò)誤進(jìn)行控制和處理的。
關(guān)鍵詞:Java,異常類,Error,Exception
1、異常的定義
就是在程序運(yùn)行時(shí)由代碼所產(chǎn)生的不正常狀態(tài)。換句話來說,異常就是一個(gè)運(yùn)行錯(cuò)誤。
異常處理的關(guān)鍵詞有:try、catch、finally 、throw、throws,共5個(gè)。
2、異常的結(jié)構(gòu)
類Thorwable是所有錯(cuò)誤類(Error)和異常類(Exception)的父類,如圖1所示。
Error類及其子類由Java虛擬機(jī)生成并拋出,由系統(tǒng)接收并處理,程序員無法通過調(diào)整程序代碼來避免這種錯(cuò)誤,例如,Java虛擬機(jī)運(yùn)行錯(cuò)誤(Virtual MachineError)和類定義錯(cuò)誤(NoClassDefFoundError)等。
Exception 類是所有異常類的父類,其子類可分為: RuntimeException和其它型異常。其中,運(yùn)行異常是程序運(yùn)行過程中出現(xiàn)的問題,例如,引用對(duì)象為空、除數(shù)為零或數(shù)組越界,則分別引發(fā)運(yùn)行時(shí)異常NullPointerException、ArithmeticException和 ArrayIndexOutOfBoundException。
圖1
3、異常處理的機(jī)制
(1)try...catch關(guān)鍵字
try/catch代碼使用語法如下:
try{
// 程序代碼
}
catch(異常類型1 異常的變量名1)
{
// 程序代碼
}
catch(異常類型2 異常的變量名2)
{
// 程序代碼
}
……
(2)finally關(guān)鍵字
finally 代碼塊出現(xiàn)在 catch 代碼塊最后并且一定處理,語法如下:
try{
// 程序代碼
}
catch(異常類型1 異常的變量名1)
{
// 程序代碼
}
catch(異常類型2 異常的變量名2)
{
// 程序代碼
}
……
Finally
{
// 程序代碼
}
4、異常類的應(yīng)用
本實(shí)例從命令行輸入兩個(gè)數(shù),用第一個(gè)數(shù)除以第二數(shù),輸出運(yùn)算結(jié)果。如果命令行沒有輸入?yún)?shù)或者參數(shù)不足,則會(huì)捕捉ArrayIndexOutOfBoundsException異常;如果輸入的參數(shù)不是數(shù)字,則會(huì)捕捉NumberFormatException異常;如果第二個(gè)參數(shù)為0,則會(huì)捕捉ArithmeticException異常,輸入正確兩個(gè)數(shù),則兩個(gè)數(shù)相除并打印出相應(yīng)的信息。
行號(hào) lsxc.java
1 public class lsxc
2 {
3 public static void main(String args[])
4 {
5
6 try
7 {
8 double a[]=new double [2];
9 double c;
10 for(int i=0;i<2;i++)
11 a[i]=Double.parseDouble(args[i]);
12 c=a[0]/a[1];
13 System.out.println(c);
14 }
15 catch(ArrayIndexOutOfBoundsException e)
16 {
17 System.out.println("沒有參數(shù)或參數(shù)不足?。?!");
18 }
19 catch(NumberFormatException e)
20 {
21 System.out.println("您輸入的不是數(shù)字?。?!");
22 }
23 catch(ArithmeticException e)
24 {
25 System.out.println("除數(shù)不能為零?。?!");
26 }
27 }
28 }
捕捉ArrayIndexOutOfBoundsException異常的運(yùn)行結(jié)果,如圖2所示。
圖2
5、結(jié)論
Java語言中的異常事件分為兩大類,即Error(錯(cuò)誤)和Exception(異常)。Exception類中定義了程序可能遇到的很多異常情況,發(fā)生異常情況時(shí),可以編寫代碼處理可能出現(xiàn)的異常情況,而不影響程序的繼續(xù)執(zhí)行。
參考文獻(xiàn)
[1]李卓玲.Java程序設(shè)計(jì)實(shí)用教程.大連理工大學(xué)出版社,2005.
[2] 遲勇.Java語言程序設(shè)計(jì).大連理工大學(xué)出版社,2013.
[3] 遲勇.Java語言程序設(shè)計(jì)實(shí)驗(yàn)及實(shí)訓(xùn)指導(dǎo).大連理工大學(xué)出版社,2013.