关于try catch finally

匿名 (未验证) 提交于 2019-12-02 21:53:32

一、try catch finally的初步理解

  首先,我们什么时候要用到try/catch和finally?  ――已知执行的代码有可能有异常的情况下





二、try catch finally的执行顺序(无return)

    1.我们来看段代码

 1 public class Test01 {  2     public static void main(String[] args) {  3         int i = 1;  4         test01(i);  5     }  6       7     public static void test01(int i) {  8         try {  9             i++; 10             System.out.println("try-----"+i); 11             i=1/0;//制造异常句子 12             i++; 13             System.out.println("try2-----"+i); 14         } catch (Exception e) { 15             i++; 16             System.out.println("catch-----"+i); 17         }finally { 18             i=5; 19             System.out.println("finally-----"+i); 20         } 21     } 22 }

    2.控制台输出结果为:

      

    3.总结:从输出结果可以看出,执行顺序为:try{} catch{} finally{} ;

      也就是先执行try{}(try-----2),try里面发生异常(i=i/0;),跳去执行catch(catch-----3),不管有没有发生异常都会执行的finally(finally-----5);

      (如果try里面没有异常将不执行catch,这里就不予以演示了)

三、try catch finally的执行顺序(带return),这里有两种情况

  第一种,return在try catch finally 后面

    1.我们来看段代码

 1 public class Test01 {  2     public static void main(String[] args) {  3         int i = 1;  4         i=test01(i);  5         System.out.println("main--------"+i);  6     }  7       8     public static int test01(int i) {  9         try { 10             i++; 11             System.out.println("try-----"+i); 12         } catch (Exception e) { 13             i++; 14             System.out.println("catch----"+i); 15         }finally { 16             i++; 17             System.out.println("finally---"+i); 18         } 19         return i; 20     } 21 }

    2.控制台输出结果

      

    3.总结:从输出结果可以看出,执行顺序为:try{} /catch{} finally{} return;

      在这里没有制造异常,就正常执行,“i”的初始值是“1”,在try里面“i++”--这时候“i”的值是“2”,在到finally里面执行“i++”,这时候“i”的值是“3”;

      最后返回给方法返回的是“3”。

      这里也进一步说明了无论try{}里面有没有发生异常,finally{}里面的代码都会执行

  第二种,return在try catch 里面――重点

    1.我们来看段代码

 1 public class Test01 {  2     public static void main(String[] args) {  3         int i = 1;  4         i=test01(i);  5         System.out.println("main--------"+i);  6     }  7       8     public static int test01(int i) {  9         try { 10             i++; 11             System.out.println("try-----"+i); 12             return i; 13         } catch (Exception e) { 14             i++; 15             System.out.println("catch----"+i); 16             return i; 17         }finally { 18             i=5; 19             System.out.println("finally---"+i); 20         } 21     } 22 }

    2.控制台输出结果为

      

    3.总结:从输出结果可以看出,执行顺序依然是:try{} /catch{} finally{} return;

      ①finally是无论如何都会执行的(打印了fianlly),所以就算try里面有return语句也不会直接返回。

      ②执行了finally之后,按道理来说“i”的值应该是“5”,为什么最后返回给main方法的值是“2”呢:

        个人猜测:这里返回的"i"不是原来的变量“i”,而是系统另外为try里面的“i值”定义了一个“i2”,返回的是“i2”,但是在这个时候“i”的值还是finally里面定义的“5”,然后在main方法里面又把“i2值”赋给了“i”,这时候"i"亦为“2”;

    4.注意:如果在finally里面添加return语句,那么将会直接返回fianlly里面的“i”,这时候main里面输出的“i”值为“5”。

      这也是进一步的说明了“不管有没有异常,finally中的代码都会执行”;那finally里面的代码执行了之后,便也执行了return语句,将不再执行try里面的return语句;

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!