3

我有下面的代码。

    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;
    }

上面代码的输出是 Hardik::15,而我认为它应该是 Hardik::35。

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

4

5 回答 5

7

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

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

问题是,return该部分中的声明try-catchfinally不会更新开始返回给调用者的值,因为该值已经被放置在内存的另一部分......

更新

我是一所非常古老的学校,所以我相信我所有方法的一个入口点和一个出口点......

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

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;
}

如果由于错误需要返回不同的值,您应该sum在您的catch部分中进行修改try-catch

于 2013-08-28T05:52:11.467 回答
2

删除return表单 try 块并在方法末尾添加。试试这个代码

   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 1;
    }
    return sum;
}

使用 finally 块进行清理活动,而不是逻辑。这不是一个好习惯。

于 2013-08-28T05:51:48.253 回答
0

从 try 块中删除return sum,您将获得所需的输出。喜欢..

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;
于 2013-08-28T05:51:01.010 回答
0

从 // 返回 1 中删除注释;并放回总和;在那里你得到你的答案。

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 sum;
    }

}
于 2013-08-28T05:56:00.210 回答
0

您在 try 块和 sum=a+b 下使用 return 语句,并且 print 语句不会引发任何异常,这就是为什么控制返回到 main 方法的总和为 15,这就是为什么您的输出是 Hardik::15。如果您希望输出符合预期,则应从 try 中删除 return 语句,并将行 return 1 替换为 return sum ,
例如:

 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");
        return 1; 
   }finally{
        sum = a+30;  
    }
    return sum;
}
于 2013-08-28T05:56:09.640 回答