Bruceli4
Bruceli4
采纳率100%
2017-02-20 16:39

Java的捕获异常问题 try finally

已采纳

public class Test {

/**
 * @param args add by zxx ,Dec 9, 2008
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println(new Test().test());
}

static int test()
{
    int x = 1;
    try
    {
        return x;
    }
    finally
    {
        ++x;
    }
}

}
运行结果是:1

不是说finally在return之前执行吗?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

5条回答

  • caozhy 从今以后生命中的每一秒都属于我爱的人 4年前

    finally是先执行,但是返回的是之前x,因为x作为返回值已经放在计算栈上了。所以不要在finally写side effect的代码

    点赞 评论 复制链接分享
  • HackAge4619 写给初学者的几封信 4年前

    自己Debug看,就知道了嘛,最终如二楼所说!

    点赞 评论 复制链接分享
  • wojiushiwo945you 毕小宝 4年前

    Java在执行finally之前,会记录try或者catch分支中需要返回值的地址,然后执行finally分支,最后才是return那个地址的值。
    所以,Java编译器会建议不要在finally里面操作返回值,因为会对影响真实的返回值的。

    点赞 评论 复制链接分享
  • fight_in_dl 战在春秋 4年前

    Java中try-catch-finally(或者try-finally)结构的执行顺序是:

    try块先执行,如果抛出异常,相应catch块执行,finally块总是最后执行

    题中代码执行顺序如下:

    1 进入try块
    2 设置函数返回值为1
    3 进入Finally块
    4 自增x.
    5 退出函数,并返回之前设置的返回值1

    return语句也是表达式语句,其值(即函数的返回值)在第2步已经确定。

    点赞 评论 复制链接分享
  • hongshq 谬词客 4年前

    …你自己试过也应该知道,try里面有return,则finally会在return后执行。

    点赞 评论 复制链接分享

相关推荐