5

我尝试了以下代码片段:

private Integer getnumber() {
    Integer i = null;
    try {
        i = new Integer(5);
        return i;
    } catch(Exception e) {
        return 0;
    } finally {
        i = new Integer(7);
    }
}

此方法返回 5 而不是 7。

为什么它返回 5 而不是 7?

提前致谢。

4

5 回答 5

3

发生这种情况是因为finallya 块try..catch..finally在代码try..catch完成后运行(无论成功与否);就您的代码而言,这是return i发生的时间。

由于这种行为,i在您将新值 7 分配给它之前,已经将 的值放入方法的返回变量中。以下将起作用:

private Integer getnumber(){
  Integer i = null;
  try {
    i = new Integer(5);
  }
  catch(Exception e){
    i = new Integer(0);
  }
  finally{
    i = new Integer(7);
  }
  return i;
}
于 2013-08-10T06:19:37.960 回答
0

您被分配了在finally您返回之前和之前的值try

finally 中的代码总是执行,但你已经返回了中的值try

于 2013-08-10T06:12:12.420 回答
0

这是因为return语句在execute之前finally执行,ireturn语句执行时的值为5。要验证这一点,您可以这样做

private Integer getnumber(){
Integer i = null;
try{
   i = new Integer(5);
   return i;
}catch(Exception e){return 0;}
finally{
  i = new Integer(7);
  System.out.println(i);
}
}

这将打印7,因为该finally块确实执行,但只是在return语句之​​后。

于 2013-08-10T06:13:03.440 回答
0

finally您分配值但该值之前在try块中返回

于 2013-08-10T06:14:06.617 回答
0

返回值是5因为在块执行return之前发生。finally

于 2013-08-10T06:24:31.700 回答