纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

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

guoyp2126   2021-10-13 我要评论
想了解java异常处理执行顺序详解try catch finally的相关内容吗guoyp2126在本文为您仔细讲解java异常try catch finally执行顺序的相关知识和一些Code实例欢迎阅读和指正我们先划重点:java异常处理执行顺序,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中的语句如果对返回的变量进行修改则将影响到返回值。


相关文章

猜您喜欢

  • C++ Opencv 膨胀腐蚀 C++ Opencv自写函数实现膨胀腐蚀处理技巧

    想了解C++ Opencv自写函数实现膨胀腐蚀处理技巧的相关内容吗秋沐霖在本文为您仔细讲解C++ Opencv 膨胀腐蚀的相关知识和一些Code实例欢迎阅读和指正我们先划重点:C++,Opencv,膨胀腐蚀,C++,Opencv,膨胀下面大家一起来学习吧。..
  • JS目录滚动特效 原生JS实现目录滚动特效

    想了解原生JS实现目录滚动特效的相关内容吗aiguangyuan在本文为您仔细讲解JS目录滚动特效的相关知识和一些Code实例欢迎阅读和指正我们先划重点:js目录滚动特效,js滚动特效,js目录滚动下面大家一起来学习吧。..

网友评论

Copyright 2020 www.Shellfishsoft.com 【贝软下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式