我有以下代码。
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-catch
的 catch
部分中的 sum
>
关于java - 最后 block 不设置java中变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18480258/