首页 > 代码库 > 关于Java里try/catch/finally/有return时执行过程

关于Java里try/catch/finally/有return时执行过程

Java代码:

public class Test1 {
  public static void main(String[] args) {
    int a=method1();
    System.out.println("result----a="+a);
}


public static int method1(){
  int a=0;
  try {
    a=1;
    System.out.println("try----a="+a);
    return a;
  } catch (Exception e) {
     a=2;
     System.out.println("catch----a="+a);
    return a;
  }finally{
    a=3;
    System.out.println("finally----a="+a);
    //return a;
  }
}
}

输出结果:

try----a=1
finally----a=3
result----a=1

无论try里面有没有return,finally里的代码都会执行。加断点可以看到,执行到try里的return时,后面会走到finally里去,finally执行完以后再次跳到try里的return语句执行返回。finally里的语句执行了,但是最终返回的结果a的值是try里赋的值,而不是finally里赋的值,这是因为在try里执行到return的时候把return的结果已经暂存起来了,然后去执行finally里的代码,这时候finally里的代码不能影响方法最终的返回值,finally里的代码执行完以后再返回到try里的return,将暂存的结果返回(官方文档)。但是如果在finally里有return,则返回值是finally里的值。

例如将finally里的return语句取消注释,则

输出结果:

try----a=1
finally----a=3
result----a=3

关于Java里try/catch/finally/有return时执行过程