欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于try catch finally

程序员文章站 2024-02-05 13:00:34
一、try catch finally的初步理解 首先,我们什么时候要用到try/catch和finally? ——已知执行的代码有可能有异常的情况下 try { //这里执行的代码如果出现异常,则立即跳到catch执行。} catch { //除非try里面执行代码发生了异常,否则这里的代码不会执 ......

一、try catch finally的初步理解

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

    try { //这里执行的代码如果出现异常,则立即跳到catch执行。} 

    catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 } 

    finally { //不管有没有异常,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.控制台输出结果为:

      关于try catch finally

 

    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.控制台输出结果

      关于try catch finally

 

    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.控制台输出结果为

      关于try catch finally

    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语句;