try和catch以及finally执行顺序

来源:互联网 发布:如何提高口语 知乎 编辑:程序博客网 时间:2024/06/08 04:26

在项目中经常会用到try、catch、finally等,那么如果我们不了它们的运行顺序以及原理,我们将会做出很多错误的操作,也会让我们的计划失败。

那么现在咱们就用一个例子来掰一掰这个问题(以下均指单线程)。

第一种情况:在程序最后面有一个return

public class Main {        public static void main(String[] args)        {            System.out.print(sum());        }        static int sum(){            int i = 0;            try{                i += 5;            }            catch(Exception e){                i += 6;            } finally{                i += 2;            }            return i;        }}
结果:i = 7。

原因:程序正常执行先执行try,然后finally,最后return。


第二种:在try和catch和finally都存在return


public class Main {        public static void main(String[] args)        {            System.out.print(sum());        }        static int sum(){            int i = 0;            try{                i += 5;                return i;            }            catch(Exception e){                i += 6;                return i;            } finally{                i += 2;               return i;            }        }}

结果:i = 7.

原因:当三者都有return时,程序会先执行try中的return,如果不报错,直接执行finally中的i += 2,然后执行finally中的return,将i = 7返回。


第三种:finally中没有return,但是try中有


public class Main {        public static void main(String[] args)        {            System.out.print(sum());        }        static int sum(){            int i = 0;            try{System.out.print("A");                i += 5;                return i;            }            catch(Exception e){                i += 6;                return i;            } finally{                i += 2;            }        }}

结果:i =  5;

原因:程序先执行 i+= 5,i 此时变为5,然后try中的return,将 i 存储,变为待返回值,其实这时已经确定了返回值为5,

如果下面没有return的话,那么返回5,即使finally中对 i 进行了操作。


相信你看到这里已经明白怎么做了吧,业务中遇到情景可以根据这三种措施采用不同的处理方式。另外也欢迎大家进行修正和交流。。。


原创粉丝点击