使用try-catch-finally返回类型

12 浏览
0 Comments

使用try-catch-finally返回类型

我尝试了以下代码片段:\n

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

\n这个方法返回的是5,而不是7。\n为什么返回的是5而不是7?\n提前感谢。

0
0 Comments

在这个问题中,finally块中你正在为变量赋值,但是这个值在try块之前就已经被返回了。

这个问题的出现原因是,在try块中的代码执行完毕后,会立即执行finally块中的代码。在finally块中,你为一个变量赋值,但是在finally块执行之前,这个变量的值已经被返回了。

要解决这个问题,你可以将try块中返回值的代码移到finally块之前。这样,无论finally块中的代码是否执行,都不会影响返回值的正确性。

以下是一个示例代码,展示了如何解决这个问题:

public class Example {

public static void main(String[] args) {

System.out.println(getValue());

}

public static int getValue() {

int value = 0;

try {

value = 10;

return value;

} finally {

value = 5;

}

}

}

在上面的示例代码中,getValue()方法中,在try块中将value变量赋值为10,并返回该值。然后,在finally块中将value变量重新赋值为5。最后,main方法中打印getValue()方法的返回值。

如果将返回值的代码放在finally块之前,即使finally块中对value变量重新赋值为5,返回的值仍然是10。这是因为finally块中的代码不会影响try块中返回值的赋值。

因此,通过将返回值的代码移到finally块之前,可以确保返回的值是正确的。在上面的示例代码中,将返回值的代码移到finally块之前,最终打印的结果是5。这表明finally块中的代码成功地修改了返回值。

总之,为了避免finally块中的赋值影响返回值的问题,应该将返回值的代码放在finally块之前。这样可以确保返回的值是正确的。

0
0 Comments

在这个问题中,出现了在finally中给变量赋值的情况,而在此之前,在try中已经返回了值。

finally语句块中的代码总是会执行,不论是否发生异常。然而,在try语句块中已经返回了值,这意味着finally语句块中的赋值操作不会对返回结果产生任何影响。

那么,该如何解决这个问题呢?一种解决方法是在try块中不要返回值,而是将需要返回的值保存在一个临时变量中。然后,在finally块中进行赋值操作,并将临时变量作为最终的返回结果。

下面是一个示例代码,演示了如何解决这个问题:

public class Main {
    public static void main(String[] args) {
        int result = getValue();
        System.out.println(result);
    }
    public static int getValue() {
        int tempResult = 0;
        try {
            tempResult = 10 / 0;
            return tempResult;
        } catch (Exception e) {
            System.out.println("Exception caught!");
        } finally {
            tempResult = 42;
        }
        return tempResult;
    }
}

在上述代码中,我们先将返回值保存在名为tempResult的临时变量中。然后,在finally块中对tempResult进行赋值操作。最后,将tempResult作为最终的返回结果。

通过这种方式,我们可以确保finally块中的赋值操作不会被try块中的返回操作所覆盖,从而得到我们期望的返回结果。

总结起来,解决这个问题的方法是在try块中不要返回值,而是将需要返回的值保存在一个临时变量中。然后,在finally块中进行赋值操作,并将临时变量作为最终的返回结果。这样可以确保finally块中的赋值操作不会被try块中的返回操作所覆盖。

0
0 Comments

在使用try-catch-finally时,出现了(Return type with try-catch-finally)的问题。这是因为在try-catch块内的代码执行完成后(无论成功与否),finally块会在此时执行。在你的代码中,这是在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;
}

在这个解决方案中,我们在try块中将i赋值为5,在catch块中将i赋值为0,最后在finally块中将i赋值为7。这样,在返回i之前,i的值将被正确地设置为7。

0