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

 更新时间:2021年10月13日 10:35:35   作者:guoyp2126  
try catch语句是java语言用于捕获异常并进行处理的标准方式,对于try catch及try catch finally执行顺序必须有深入的了解

不含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后的代码!");
    }

执行结果为:

在这里插入图片描述

如果有异常,则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后的代码!");
    }

执行结果

在这里插入图片描述

发生异常语句后的代码: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后面的语句不可能得到执行。

在这里插入图片描述

含有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;
        }
    }

执行结果

在这里插入图片描述

如果再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);  //退出程序,返回值丢失
        }
    }

执行结果如下图:

在这里插入图片描述

没有输出返回值

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

返回类型如果是对象类型,则返回的是指针。此时如果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("李老五");;
        }
    }

执行结果

在这里插入图片描述

结论

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

以上就是java异常处理执行顺序详解try catch finally的详细内容,更多关于java异常try catch finally执行顺序的资料请关注脚本之家其它相关文章!

相关文章

  • 深入理解Java 对象和类

    深入理解Java 对象和类

    下面小编就为大家带来一篇深入理解Java 对象和类。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • Jenkins节点配置实现原理及过程解析

    Jenkins节点配置实现原理及过程解析

    这篇文章主要介绍了Jenkins节点配置实现原理及过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Java中的Apache Commons Math使用详解

    Java中的Apache Commons Math使用详解

    Java中的Apache Commons Math是一个开源的数学库,它提供了许多常用的数学函数和算法,这个库对于需要处理大量数据的开发者来说非常有用,因为它可以大大简化代码并提高效率,本文给大家详解讲解Java中的Apache Commons Math知识,感兴趣的朋友跟随小编一起看看吧
    2023-08-08
  • SpringBoot实现快递物流查询功能(快递鸟)

    SpringBoot实现快递物流查询功能(快递鸟)

    本文将基于springboot2.4.0实现快递物流查询,物流信息的获取通过快递鸟第三方实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-10-10
  • Java常用开源库汇总

    Java常用开源库汇总

    这篇文章主要介绍了Java常用开源库的相关资料,文中讲解非常细致,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
    2020-07-07
  • SpringBoot如何配置数据库主从shardingsphere

    SpringBoot如何配置数据库主从shardingsphere

    这篇文章主要介绍了SpringBoot如何配置数据库主从shardingsphere问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • SpringBoot3.x循环依赖问题解决方案

    SpringBoot3.x循环依赖问题解决方案

    这篇文章主要介绍了SpringBoot3.x循环依赖的相关知识,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • 散列算法与散列码(实例讲解)

    散列算法与散列码(实例讲解)

    下面小编就为大家带来一篇散列算法与散列码(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Maven中怎么手动添加jar包到本地仓库详解(repository)

    Maven中怎么手动添加jar包到本地仓库详解(repository)

    这篇文章主要给大家介绍了关于Maven中怎么手动添加jar包到本地仓库的相关资料,文中通过图文以及实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-04-04
  • spring使用WebSocket注入service层失败问题及解决

    spring使用WebSocket注入service层失败问题及解决

    这篇文章主要介绍了spring使用WebSocket注入service层失败问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07

最新评论