對(duì)于java異常處理機(jī)制的深入理解
發(fā)表時(shí)間:2024-05-23 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]1 引子 try…catch…finally恐怕是大家再熟悉不過(guò)的語(yǔ)句了,而且感覺(jué)用起來(lái)也是很簡(jiǎn)單,邏輯上似乎也是很容易理解。不過(guò),我親自體驗(yàn)的“教訓(xùn)”告訴我,這個(gè)東西可不是想象中的那么簡(jiǎn)單、聽(tīng)話。不信?那你看看下面的代碼,“猜猜”它執(zhí)行后的結(jié)果會(huì)是什么?不要往后看答案、也不許執(zhí)行代碼看真正答...
1 引子
try…catch…finally恐怕是大家再熟悉不過(guò)的語(yǔ)句了,而且感覺(jué)用起來(lái)也是很簡(jiǎn)單,邏輯上似乎也是很容易理解。不過(guò),我親自體驗(yàn)的“教訓(xùn)”告訴我,這個(gè)東西可不是想象中的那么簡(jiǎn)單、聽(tīng)話。不信?那你看看下面的代碼,“猜猜”它執(zhí)行后的結(jié)果會(huì)是什么?不要往后看答案、也不許執(zhí)行代碼看真正答案哦。如果你的答案是正確,那么這篇文章你就不用浪費(fèi)時(shí)間看啦。
package myExample.testException;
public class TestException {
public TestException() {
}
boolean testEx() throws Exception{
boolean ret = true;
try{
ret = testEx1();
}catch (Exception e){
System.out.println("testEx, catch exception");
ret = false;
throw e;
}finally{
System.out.println("testEx, finally; return value="+ret);
return ret;
}
}
boolean testEx1() throws Exception{
boolean ret = true;
try{
ret = testEx2();
if (!ret){
return false;
}
System.out.println("testEx1, at the end of try");
return ret;
}catch (Exception e){
System.out.println("testEx1, catch exception");
ret = false;
throw e;
}
finally{
System.out.println("testEx1, finally; return value="+ret);
return ret;
}
}
boolean testEx2() throws Exception{
boolean ret = true;
try{
int b=12;
int c;
for (int i=2;i>=-2;i--){
c=b/i;
System.out.println("i="+i);
}
return true;
}catch (Exception e){
System.out.println("testEx2, catch exception");
ret = false;
throw e;
}
finally{
System.out.println("testEx2, finally; return value="+ret);
return ret;
}
}
public static void main(String[] args) {
TestException testException1 = new TestException();
try{
testException1.testEx();
}catch(Exception e){
e.printStackTrace();
}
}
}
你的答案是什么?是下面的答案嗎?
i=2
i=1
testEx2, catch exception
testEx2, finally; return value=false
testEx1, catch exception
testEx1, finally; return value=false
testEx, catch exception
testEx, finally; return value=false
如果你的答案真的如上面所說(shuō),那么你錯(cuò)啦。^_^,那就建議你仔細(xì)看一看這篇文章或者拿上面的代碼按各種不同的情況修改、執(zhí)行、測(cè)試,你會(huì)發(fā)現(xiàn)有很多事情不是原來(lái)想象中的那么簡(jiǎn)單的。
現(xiàn)在公布正確答案:
i=2
i=1
testEx2, catch exception
testEx2, finally; return value=false
testEx1, finally; return value=false
testEx, finally; return value=false
2 基礎(chǔ)知識(shí)
2.1 相關(guān)概念
例外是在程序運(yùn)行過(guò)程中發(fā)生的異常事件,比如除0溢出、數(shù)組越界、文件找不到等,這些事件的發(fā)生將阻止程序的正常運(yùn)行。為了加強(qiáng)程序的魯棒性,程序設(shè)計(jì)時(shí),必須考慮到可能發(fā)生的異常事件并做出相應(yīng)的處理。C語(yǔ)言中,通過(guò)使用if語(yǔ)句來(lái)判斷是否出現(xiàn)了例外,同時(shí),調(diào)用函數(shù)通過(guò)被調(diào)用函數(shù)的返回值感知在被調(diào)用函數(shù)中產(chǎn)生的例外事件并進(jìn)行處理。全程變量ErroNo常常用來(lái)反映一個(gè)異常事件的類型。但是,這種錯(cuò)誤處理機(jī)制會(huì)導(dǎo)致不少問(wèn)題。