国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java中try,catch,finally的用法

2019-11-06 06:38:40
字體:
供稿:網(wǎng)友

1。可以在方法簽名上加上異常public T method1() throws AException {try{}catch(BExcption e) {throw new AException();}}2。可以再次捕獲異常public T method1(){try{}catch(BExcption e) {try{  doSomething();//這個語句可能拋出異常}catch(AException ex) {  ...}}}

java中try,catch,finally的用法,以前感覺還算熟悉,但看到一篇博文才有更深點的理解,總結(jié)網(wǎng)友博客如下。

Java異常處理的組合方式:

1.try+catch 運行流程:運行到try塊中,如果有異常拋出,則轉(zhuǎn)到catch塊去處理。然后執(zhí)行catch塊后面的語句 

2.try+catch+finally 

運行流程:運行到try塊中,如果有異常拋出,則轉(zhuǎn)到catch塊,catch塊執(zhí)行完畢后,執(zhí)行finally塊的代碼,再執(zhí)行finally塊后面的代碼。

如果沒有異常拋出,執(zhí)行完try塊,也要去執(zhí)行finally塊的代碼。然后執(zhí)行finally塊后面的語句 

3.try+finally 運行流程:運行到try塊中,如果有異常拋出的話,程序轉(zhuǎn)向執(zhí)行finally塊的代碼。那末finally塊后面的代碼還會被執(zhí)行嗎?不會!因為你沒有處理異常,所以遇到異常后,執(zhí)行完finally后,方法就以拋出異常的方式退出。 這種方式中要注意的是,由于你沒有捕獲異常,所以要在方法后面聲明拋出異常。共同點:1.在catch塊和finally塊中仍然可以再拋出新的異常例如 throw new Exception("illegal invoked");如果對于新拋出的異常沒有寫try的話,則要在方法后面聲明拋出異常

反之,如果給catch塊或finally塊里的異常再套上一層try,catch的話,方法后面就不必聲明異常了。

問題:try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執(zhí)行,什么時候被執(zhí)行,在return前還是后? 

我們來看下面代碼:

[java] view plain copypublic  class Test {        /**      * @param args add by zxx ,Dec 9, 2008      */      public static void main(String[] args) {          // TODO Auto-generated method stub          System.out.PRintln(new Test().test());;      }        static int test()      {          int x = 1;          try          {              return x;          }          finally          {              ++x;          }      }        }  ---------執(zhí)行結(jié)果 ---------1

[java] view plain copypublic class  smallT  {      public static void  main(String args[])      {          smallT t  = new  smallT();          int  b  =  t.get();          System.out.println(b);      }            public int  get()      {          try          {              return 1 ;          }          finally          {              return 2 ;          }      }  }  ---------執(zhí)行結(jié)果 ---------2

[java] view plain copypublic  class Test {        /**      * @param args add by zxx ,Dec 9, 2008      */      public static void main(String[] args) {          // TODO Auto-generated method stub          System.out.println(new Test().test());;      }        int test()      {          try          {              return func1();          }          finally          {              return func2();          }      }            int func1()      {          System.out.println("func1");          return 1;      }      int func2()      {          System.out.println("func2");          return 2;      }     }  -----------執(zhí)行結(jié)果-----------------func1func22

分析:

從上面3個例子的運行結(jié)果中可以發(fā)現(xiàn),try中的return語句調(diào)用的函數(shù)先于finally中調(diào)用的函數(shù)執(zhí)行,也就是說return語句先執(zhí)行,finally語句后執(zhí)行。Return并不是讓函數(shù)馬上返回,而是return語句執(zhí)行后,將把返回結(jié)果放置進函數(shù)棧中,此時函數(shù)并不是馬上返回,它要執(zhí)行finally語句后才真正開始返回。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 邹平县| 满洲里市| 汉阴县| 南通市| 饶平县| 宜良县| 九江市| 礼泉县| 东光县| 新昌县| 南木林县| 张北县| 广饶县| 曲周县| 永丰县| 峨边| 宜川县| 西畴县| 弋阳县| 武威市| 正阳县| 厦门市| 西乌| 南阳市| 大邑县| 古浪县| 太白县| 改则县| 万源市| 定襄县| 黔东| 周口市| 江城| 四会市| 稷山县| 图木舒克市| 安福县| 嘉黎县| 祥云县| 阿合奇县| 余干县|