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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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时执行过程的主要内容,如果未能解决你的问题,请参考以下文章

关于Java中try catch finally throw return的执行顺序问题

关于try catch finally

下面有关Java异常处理模型的说法错误的是

php 关于try catch finally的执行顺序解释

关于try catch finally的执行顺序解释

java中的“try - catch -finally”结构中的“finally”都有哪些用途