首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >finally代码块总是在Java中执行吗?

finally代码块总是在Java中执行吗?
EN

Stack Overflow用户
提问于 2008-09-16 01:43:55
回答 31查看 555.2K关注 0票数 2.6K

考虑到这段代码,我能绝对确定无论something()是什么,finally块都会执行吗?

代码语言:javascript
复制
try {  
    something();  
    return success;  
}  
catch (Exception e) {   
    return failure;  
}  
finally {  
    System.out.println("I don't know if this will get printed out");
}
EN

回答 31

Stack Overflow用户

发布于 2008-09-15 17:59:52

示例代码:

代码语言:javascript
复制
public static void main(String[] args) {
    System.out.println(Test.test());
}

public static int test() {
    try {
        return 0;
    }
    finally {
        System.out.println("something is printed");
    }
}

输出:

代码语言:javascript
复制
something is printed. 
0
票数 606
EN

Stack Overflow用户

发布于 2008-09-15 18:19:54

此外,尽管这是一种糟糕的做法,但如果finally块中有一个return语句,它将胜过来自常规块的任何其他返回语句。也就是说,下面的代码块将返回false:

代码语言:javascript
复制
try { return true; } finally { return false; }

从finally块中抛出异常也是一样的事情。

票数 413
EN

Stack Overflow用户

发布于 2010-05-13 15:12:00

除了其他响应之外,还必须指出'finally‘有权覆盖try..catch块返回的任何异常/返回值。例如,下面的代码返回12:

代码语言:javascript
复制
public static int getMonthsInYear() {
    try {
        return 10;
    }
    finally {
        return 12;
    }
}

同样,下面的方法不会抛出异常:

代码语言:javascript
复制
public static int getMonthsInYear() {
    try {
        throw new RuntimeException();
    }
    finally {
        return 12;
    }
}

而下面的方法确实抛出了它:

代码语言:javascript
复制
public static int getMonthsInYear() {
    try {
        return 12;          
    }
    finally {
        throw new RuntimeException();
    }
}
票数 171
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档