服务器之家

服务器之家 > 正文

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

时间:2022-02-17 15:06     来源/作者:guoyp2126

不含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中的语句如果对返回的变量进行修改,则将影响到返回值。

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

原文链接:https://blog.csdn.net/guoyp2126/article/details/117484471

相关文章

热门资讯

蜘蛛侠3英雄无归3正片免费播放 蜘蛛侠3在线观看免费高清完整
蜘蛛侠3英雄无归3正片免费播放 蜘蛛侠3在线观看免费高清完整 2021-08-24
2022年最旺的微信头像大全 微信头像2022年最新版图片
2022年最旺的微信头像大全 微信头像2022年最新版图片 2022-01-10
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
返回顶部