明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

對(duì)于java異常處理機(jī)制的深入理解

[摘要]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)題。