码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-04-25 16:52:27      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:oid   而不是   sys   文档   eth   class   result   return语句   rgs   

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时执行过程

标签:oid   而不是   sys   文档   eth   class   result   return语句   rgs   

原文地址:http://www.cnblogs.com/zhouxf/p/6762585.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!