Java中try、catch、finally的用法

    xiaoxiao2021-04-18  67

    Java中try,catch,finally的用法,以前感觉还算熟悉,但看到一篇博文才有更深点的理解,总结网友博客如下。

    Java异常处理的组合方式:

    1.try+catch  运行流程:运行到try块中,如果有异常抛出,则转到catch块去处理。然后执行catch块后面的语句 

    2.try+catch+finally 

    运行流程:运行到try块中,如果有异常抛出,则转到catch块,catch块执行完毕后,执行finally块的代码,再执行finally块后面的代码。

    如果没有异常抛出,执行完try块,也要去执行finally块的代码。然后执行finally块后面的语句 

    3.try+finally  运行流程:运行到try块中,如果有异常抛出的话,程序转向执行finally块的代码。那末finally块后面的代码还会被执行吗?不会!因为你没有处理异常,所以遇到异常后,执行完finally后,方法就以抛出异常的方式退出。  这种方式中要注意的是,由于你没有捕获异常,所以要在方法后面声明抛出异常。 共同点: 1.在catch块和finally块中仍然可以再抛出新的异常 例如 throw new Exception("illegal invoked"); 如果对于新抛出的异常没有写try的话,则要在方法后面声明抛出异常

    反之,如果给catch块或finally块里的异常再套上一层try,catch的话,方法后面就不必声明异常了。

    问题:try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 

    我们来看下面代码:

    [java]  view plain  copy public  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;           }       }          }   ---------执行结果 --------- 1

    [java]  view plain  copy public 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 ;           }       }   }   ---------执行结果 --------- 2

    [java]  view plain  copy public  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;       }      }   -----------执行结果----------------- func1 func2 2

    分析:

    从上面3个例子的运行结果中可以发现,try中的return语句调用的函数先于finally中调用的函数执行,也就是说return语句先执行,finally语句后执行。Return并不是让函数马上返回,而是return语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行finally语句后才真正开始返回。

    转载请注明原文地址: https://ju.6miu.com/read-675370.html

    最新回复(0)