相关疑难解决方法(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万
查看次数

为什么更改finally块中的返回变量不会更改返回值?

我有一个简单的Java类,如下所示:

public class Test {

    private String s;

    public String foo() {
        try {
            s = "dev";
            return s;
        } 
        finally {
            s = "override variable s";
            System.out.println("Entry in finally Block");  
        }
    }

    public static void main(String[] xyz) {
        Test obj = new Test();
        System.out.println(obj.foo());
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码的输出是这样的:

Entry in finally Block
dev  
Run Code Online (Sandbox Code Playgroud)

为什么s不在finally块中覆盖,而是控制打印输出?

java try-finally

145
推荐指数
6
解决办法
1万
查看次数

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:尝试finally块执行

return;try块中存在try-finally执行时,我感到困惑.根据我的理解,finally块将始终执行,即在返回调用方法之前.在考虑以下简单代码时:

public class TryCatchTest {
    public static void main(String[] args){
        System.out.println(test());
    }
    static int test(){
        int x = 1;
        try{
            return x;
        }
        finally{
            x = x + 1;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

打印的结果实际上是1.这是否表示finally块未执行?任何人都可以帮助我吗?

java finally try-catch

31
推荐指数
2
解决办法
2624
查看次数

如果尝试并最终在方法中返回布尔值,会发生什么情况

我有一个班级-公共班级Check {

public static void main(String[] args) {
    System.out.println(new Check().isRight());
}


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

isRight方法在finally子句中返回true和false,并且由于将肯定调用finally子句,因此最终它返回false,所以try中的数据实际发生了什么。我需要知道输出背后的逻辑原因,但我无法正确理解。

java

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