相关疑难解决方法(0)

finally块总是在Java中执行吗?

考虑到这一点的代码,我可以绝对肯定的是,finally块总是执行,不管something()是什么?

try {  
    something();  
    return success;  
}  
catch (Exception e) {   
    return failure;  
}  
finally {  
    System.out.println("I don't know if this will get printed out");
}
Run Code Online (Sandbox Code Playgroud)

java return try-catch-finally

2281
推荐指数
38
解决办法
48万
查看次数

Java try-finally返回设计问题

在Java中,try {...} finally {...}对我来说有些不直观.如另一个问题所示,最终总是在Java中执行吗?,如果try块中有return语句,则在定义finally块时将忽略它.例如,功能

boolean test () {
    try {
        return true;
    }
    finally {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

总是会返回false.我的问题:这是为什么?这个由Java做出的设计决策背后有一个特定的哲学吗?我很感激任何见解,谢谢.

编辑:我特别感兴趣的是'为什么'Java认为可以违反我定义的语义.如果我在try块中'返回',那么该方法应该在那里返回.但是JVM决定忽略我的指令并从一个实际尚未到达的子程序返回.

java

38
推荐指数
1
解决办法
2万
查看次数

Java:终于如何抛出特朗普?

我刚刚在我们的一个Java库中遇到了一个隐藏的gem:

for(Widget w : widgets) {
    if(shouldDoStuff()) {
        try{
            // Do stuff to w.
        } catch(Exception e){
            throw new RuntimeException("Couldn't do stuff.");
        } finally{
            // Compiler warning: finally block does not complete normally
            continue;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道这finally胜过一切,但我想知道两件事:

  1. 当发生什么catch条款执行呢?异常是否被抛出?首先发生什么:抛出的异常或continue声明?
  2. 我怎样才能重写这个以消除警告?

我发现了这个非常相似的问题,但是接受的答案只是声明异常将被突然抛出,我不确定这意味着什么.另外,它并没有真正帮助我理解我上面提到的关于将要发生的事件顺序的第一个问题.

java exception throw compiler-warnings try-catch-finally

2
推荐指数
1
解决办法
162
查看次数