java - 最后 block 不设置java中变量的值

标签 java

我有以下代码。

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        try{
            System.out.println("Hardik::"+testFinnalyBlock());  
        }catch(Exception e){
            System.out.println("hhh");
        }
    }


    public static int testFinnalyBlock() throws Exception{
        int a=5,b=10;
        int sum=0;
        try{
            sum = a+b;
            System.out.println("sum==="+sum);
            return sum;
        }catch(Exception e){
            System.out.println("In Catch");
        }finally{
            sum = a+30;
            System.out.println("sum==="+sum);
//          return 1;
        }
        return 1;
    }

上面代码的输出 哈迪克::15, 虽然我认为应该是 Hardik::35。

谁能告诉我它是如何工作的。 谢谢。

最佳答案

根据您的输出,finally block 正在执行...

sum===15
sum===35
Hardik::15

问题在于 try-catch 部分中的 return 语句。 finally 不会更新返回给调用者的 begin 值,因为该值已经被放置在内存的另一部分......

更新

我是一个相当老派的人,所以我相信我的所有方法都有一个入口点和一个导出点......

像下面这样的东西会产生你想要得到的结果......

public static int testFinnalyBlock() throws Exception {
    int a = 5, b = 10;
    int sum = 0;
    try {
        sum = a + b;
        System.out.println("sum===" + sum);
    } catch (Exception e) {
        System.out.println("In Catch");
    } finally {
        sum = a + 30;
        System.out.println("sum===" + sum);
    }
    return sum;
}

如果由于错误而需要返回不同的值,则应修改 try-catchcatch 部分中的 sum >

关于java - 最后 block 不设置java中变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18480258/

相关文章:

java - 为什么从 ViewModel 进行调用时,Retrofit enqueue 不起作用?

java - JNI - 创建另一个 C++ 类的实例

java - Spring 启动 : Configure a url prefix for RestControllers

java - Emacs 和 Java 更改传播和错误通知

java - jpa:在 Lob 字段上点赞

java - 如何编辑此代码创建的按钮?

java - Java中的哈希—结构和访问时间

java - Spring:调用 new ClassPathXmlApplicationContext() 时出现 FileNotFoundException

java - 获取 Controller 中的 View

java - 用于解析堆栈跟踪中完全限定的 Java 名称的正则表达式