java finally 常见的执行顺序及不执行的三种情况

finally 一定会执行吗?答案是否定的!

执行顺序

下面根据示例说下finally正常执行时候的顺序。

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public class Test01 {

  public static void main(String[] args) {
    // TODO Auto-generated method stub

    System.out.println("result = "+testString2());
    System.out.println("result = "+testFinal1());
   
  }
  
  public static StringBuffer testString2() {
    StringBuffer sb = new StringBuffer("Hello");
    try {
      sb.append(" 111 ");
      return sb;
    }
    finally {
      sb.append("world!");
      System.out.println("complete work!");
    }
  }
  
  public static int testFinal1() {
    int result=0;
    try {
      result =1;
      return result;
    }
    catch(Exception e) {
      result=2;
      return result;
    }
    finally {
      result=3;
      System.out.println("execute finally");
    }
  }

}

执行结果如下:

complete work!
result = Hello 111 world!
execute finally
result = 1

由此可见: try语句中 如果要返回基本类型,在返回前会复制一份变量值,在finally里面修改这个变量的值将不起作用,返回引用的时候,可以被修改。

不执行的情况

1、直接返回,未执行到 try...finally 语句块

2、发生异常停止  

      i = i / 0;//抛出异常未执行到finally语句块

3、程序退出 

    System.exit(0);//系统退出未执行到finally语句块

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值