Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在finally语句中是否仍有返回值?_Java_Finally - Fatal编程技术网

Java 在finally语句中是否仍有返回值?

Java 在finally语句中是否仍有返回值?,java,finally,Java,Finally,在一些遗留代码中,有几个地方可以返回值。我想记录返回值。是否可以在finally语句中获取返回值 例如: try { if (v == 1) { return 3; } else if (v == 3) { return x + 2; } } finally { // I need to know the return value here, either 3 or x + 2. } 没有;finally块没有上一个返回值的上下文 最好将值存

在一些遗留代码中,有几个地方可以返回值。我想记录返回值。是否可以在finally语句中获取返回值

例如:

try {
   if (v == 1) { 
      return 3;
   } else if (v == 3) {
      return x + 2;
   }
} finally {
   // I need to know the return value here, either 3 or x + 2. 
}

没有;
finally
块没有上一个返回值的上下文

最好将值存储在变量中,记录变量,然后稍后返回变量

int result = 0;
if (v == 1) {
  result = 3;
  log.debug(result);
  return result;
} else if (v == 3) {
  result = x + 2;
  log.debug(result);
  return result;
}

调用
return
后,将跳过该函数中的所有其他内容。如果您想知道该值是多少,最好将
3
x+2
保存在
try
块范围之外的变量中

int ret = -1;
try {
    if (v == 1) {
        ret = 3;
    }
    else if (v == 3) {
        ret = x + 2;
    }
}
finally {
    System.out.println("The value of ret is " + ret);
}
return ret;

为什么不在返回
if
else if
语句之前记录它?返回后,它将退出该方法。否。您可以做的是影响一个变量,在finally中使用它,然后返回它。您希望finally块的值是多少,以查看
v
是否既不是1也不是3?因为这是遗留代码,我希望进行尽可能少的更改。可能希望将
return
移到
finally
块之外。@Andreas,说得好。这就是我没有跟上Java约定的原因:P