Java異常調(diào)試
一、Java異常機(jī)制
由于程序本身的設(shè)計(jì)邏輯和運(yùn)行的環(huán)境等因素传惠,出現(xiàn)異常的情況不可避免迄沫,java虛擬機(jī)針對(duì)不同的異常情況定義了很多異常類。
例如:正常情況下卦方,我們可以按時(shí)上班羊瘩,但是不能保證出現(xiàn)特殊情況的時(shí)候,比如某天天氣惡劣盼砍,堵車嚴(yán)重尘吗,導(dǎo)致了上班遲到。這里就是出現(xiàn)了“異辰阶”
二摇予、異常的體系結(jié)構(gòu)
- Object所有類的頂層父類
- Throwable 所有異常類和錯(cuò)誤類的頂層父類
- Exception 所有異常類的頂層父類
- Error 所有錯(cuò)誤類的頂層父類
- IOException 異常的某一個(gè)子類,主要是IO操作出現(xiàn)的異常
- RuntimeException 運(yùn)行時(shí)異常的頂層父類(例如:子類包括有 空指針異常,數(shù)組越界異常,非法參數(shù)異常等)
三吗跋、處理異常的兩種方式
【方式一】拋出異常,別人處理(遇到問題,自己不去解決跌宛,交給別人解決)
public static void main(String[] args) throws ArrayIndexOutOfBoundsException {
//調(diào)用方法酗宋。可以處理異常(自己不處理,也可以向外拋出,交給別人處理,在main()方法拋出,交給JVM虛擬機(jī)處理)
method();
}
//處理異常的方式:拋出異常,交給別人處理,自己不處理疆拘。誰調(diào)用該方法,誰處理
public static void method() throws ArrayIndexOutOfBoundsException{
// 定義一個(gè)int類型的數(shù)組,數(shù)組當(dāng)中指定長度為3,可以容納3個(gè)元素
int[] arr = new int[3];
// 獲取數(shù)組索引為5的元素.這里會(huì)出現(xiàn)異常的情況
// (長度為3,索引范圍在0~2,獲取索引為5,超出范圍.越界異常)
int num = arr[5];
System.out.println(num);
}
解析:
上述采用的是拋出異常的方式蜕猫,自己不處理,交給別人處理哎迄。
處理的格式: 在方法的形式參數(shù)后面,拋出異常 throws 異常名稱
例如:我們需要租房子回右,自己不去解決找房子的問題,找中介幫忙解決找房租房問題漱挚。
【方式二】拋出異常翔烁,自己處理(遇到問題,自己單獨(dú)解決)
public static void main(String[] args) {
// 調(diào)用方法旨涝。
method();
}
// 處理異常的方式:捕獲異常,自己可以單獨(dú)解決問題
public static void method() {
// 定義一個(gè)int類型的數(shù)組,數(shù)組當(dāng)中指定長度為3,可以容納3個(gè)元素
int[] arr = new int[3];
try {
// 獲取數(shù)組索引為5的元素.這里會(huì)出現(xiàn)異常的情況
// (長度為3,索引范圍在0~2,獲取索引為5,超出范圍.越界異常)
int num = arr[5];
System.out.println(num);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("在這里處理該異常:數(shù)組索引越界");
} finally {
System.out.println("不管是否出現(xiàn)異常的情況,都要執(zhí)行這段代碼");
}
}
解析:
上述問題是捕獲異常的操作蹬屹。遇到問題之后,自己單獨(dú)解決白华。
處理的格式: try{ ...可能會(huì)出現(xiàn)異常的代碼... }catch(異常的類型){ ...解決方案... }finally{ ...始終都會(huì)執(zhí)行的代碼.... }
例如: 我們需要洗衣服慨默,不想讓別人幫忙洗,也不想用洗衣機(jī)弧腥。
那么就可以自己解決厦取,需要洗衣服的時(shí)候,找一個(gè)盆管搪,加點(diǎn)水和洗衣服虾攻,浸泡揉...
四、異常的好處
異常機(jī)制能夠幫助我們快速的定位到出現(xiàn)問題的代碼以及出現(xiàn)問題的原因抛蚤。這樣可以快速的修復(fù)代碼當(dāng)中的問題台谢。
例如:當(dāng)我們運(yùn)行某段程序的過程當(dāng)中,會(huì)給出對(duì)應(yīng)的提示信息岁经。通過這段提示信息朋沮,就可以清晰的知道原因和位置。
案例:(下面是出現(xiàn)某個(gè)異常的時(shí)候缀壤,給出的提示信息)
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at com.itheima_01.Test.method(Test.java:18)
at com.itheima_01.Test.main(Test.java:8)
解析:
第一行: 告知了我們的異常出現(xiàn)的原因是 ArrayIndexOutOfBoundsException 數(shù)組越界異常,越界的數(shù)據(jù)是 5
第二行: 告知了我們異常第一次出現(xiàn)的位置是 在Test.java當(dāng)中的第 18行
第三行: 告知了我們異常第二次出現(xiàn)的位置是 在Test.java當(dāng)中的第 8行
通過上面的分析,我們可以定位到具體某一行,某個(gè)原因,某個(gè)數(shù)據(jù).進(jìn)行相關(guān)的修復(fù)即可漠酿。