软件编程
位置:首页>> 软件编程>> java编程>> java异常处理执行顺序详解try catch finally

java异常处理执行顺序详解try catch finally

作者:guoyp2126  发布时间:2022-10-01 04:10:10 

标签:异常,try,catch,finally
目录
  • 不含return的执行顺序

    • finally子句

  • 含return的执行顺序

    • 返回类型是对象类型时值的变化

      • 结论

        不含return的执行顺序

        执行顺序为执行try中代码,如果没有异常,然后执行try catch后续的代码。如:


        public static void main(String[] args) {
               try {
                   int j = 10 / 2;
                   System.out.println("执行try中代码!");
               } catch (Exception e) {
                   e.printStackTrace();
                   System.out.println("执行catch中代码!");
               }
               System.out.println("执行catch后的代码!");
           }

        执行结果为:

        java异常处理执行顺序详解try catch finally

        如果有异常,则try中异常后的代码将不执行,开始执行catch中的代码,执行完成后,执行try catch后续的代码,示例代码如下:


           public static void main(String[] args) {
               try {
                   int j = 10 / 0;
                   System.out.println("执行try中代码!");
               } catch (Exception e) {
                   e.printStackTrace();
                   System.out.println("执行catch中代码!");
               }
               System.out.println("执行catch后的代码!");
           }

        执行结果

        java异常处理执行顺序详解try catch finally

        发生异常语句后的代码:System.out.println(“执行try中代码!”)不再执行。

        finally子句

        使用try catch finally子句时,无论发生不发生异常,finally子句中的代码都是要执行,一般用于释放资源、连接等操作。


          public static void main(String[] args)  {
               try {
                   int i = 8/0;
                   System.out.println("执行try中代码!");
               } catch (Exception e) {
                   System.out.println("执行catch中代码!");
               } finally {
                   System.out.println("执行finally中代码!");
               }
               System.out.println("执行try catch后的代码!");
           }

        执行try catch或try catch finally之后,执行后续的代码。

        含return的执行顺序

        如果不包含finally语句,在try子句和catch子句中均含有return语句,代码遇到return语句则终止代码的执行,try catch后面的语句不可能得到执行。

        java异常处理执行顺序详解try catch finally

        含有finally语句的try catch子句包含return语句执行顺序,执行finally子句,然后执行try或者catch的return语句,此时若finally语句包含return或终止运行,则try catch子句中的return语句将不执行。如:


           public static void main(String[] args)  {
              Integer i= testReturn();
               System.out.println(i);
           }

        public static Integer testReturn(){
               try {
                   int i = 8/0;
                   System.out.println("执行try中代码!");
                   return 1;
               } catch (Exception e) {
                   System.out.println("执行catch中代码!");
                   return 0;
               }
               finally {
                   System.out.println("执行finally中代码!");
                   return 3;
               }
           }

        执行结果

        java异常处理执行顺序详解try catch finally

        如果再finally终止程序运行,则丢失返回值


        public static void main(String[] args)  {
              Integer i= testReturn();
               System.out.println(i);
           }
           public static Integer testReturn(){
               try {
                   int i = 8/0;
                   System.out.println("执行try中代码!");
                   return 1;
               } catch (Exception e) {
                   System.out.println("执行catch中代码!");
                   return 0;
               }
               finally {
                   System.out.println("执行finally中代码!");
                   System.exit(0);  //退出程序,返回值丢失
               }
           }

        执行结果如下图:

        java异常处理执行顺序详解try catch finally

        没有输出返回值

        返回类型是对象类型时值的变化

        返回类型如果是对象类型,则返回的是指针。此时如果finally中包含对象的炒作,注意返回值的变化。示例代码如下
        创建一个Person的类


        public class Person {
           private  String name;
           private  String adress;
           @Override
           public String toString() {
               return "Person{" +
                       "name='" + name + '\'' +
                       ", adress='" + adress + '\'' +
                       '}';
           }
           public String getName() {
               return name;
           }

        public void setName(String name) {
               this.name = name;
           }

        public String getAdress() {
               return adress;
           }

        public void setAdress(String adress) {
               this.adress = adress;
           }
        }

        含有return的测试代码如下


           public static void main(String[] args)  {
               Person person = testObjReturn();
               System.out.println(person.toString());
           }
           public static Person testObjReturn(){
               Person person = new Person();
               try {
                   int i = 8/0;
                   person.setName("王小二");
                   person.setAdress("电子街1号");
                   return person;
               } catch (Exception e) {
                   person.setName("朱小三");
                   person.setAdress("电子街1号");
                   return person;
               }
               finally {
                   person.setName("李老五");;
               }
           }

        执行结果

        java异常处理执行顺序详解try catch finally

        结论

        try catch finally带有return语句时,既可以将return语句放到try和catch中,也可以放到过程的结尾,一般建议放到结尾,便于统一管理。特别注意finally包含return语句时try、catch中的return将不再执行。尤其当返回的变量是实体对象时,finally中的语句如果对返回的变量进行修改,则将影响到返回值。

        来源:https://blog.csdn.net/guoyp2126/article/details/117484471

        0
        投稿

        猜你喜欢

        手机版 软件编程 asp之家 www.aspxhome.com