java异常处理执行顺序详解try|java异常处理执行顺序详解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|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|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|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|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|java异常处理执行顺序详解try catch finally
        文章图片

        没有输出返回值
        【java异常处理执行顺序详解try|java异常处理执行顺序详解try catch finally】
        返回类型是对象类型时值的变化 返回类型如果是对象类型,则返回的是指针。此时如果finally中包含对象的炒作,注意返回值的变化。示例代码如下
        创建一个Person的类
        public class Person {privateString name; privateString adress; @Overridepublic 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|java异常处理执行顺序详解try catch finally
        文章图片


        结论 try catch finally带有return语句时,既可以将return语句放到try和catch中,也可以放到过程的结尾,一般建议放到结尾,便于统一管理。特别注意finally包含return语句时try、catch中的return将不再执行。尤其当返回的变量是实体对象时,finally中的语句如果对返回的变量进行修改,则将影响到返回值。
        以上就是java异常处理执行顺序详解try catch finally的详细内容,更多关于java异常try catch finally执行顺序的资料请关注脚本之家其它相关文章!

          推荐阅读