在java中,try或catch中的返回是如何工作的?
根据答案,, 据说,如果在try/catch块中有return语句,那么在执行return语句之前,将执行finally块 但我看到以下代码的一些意外输出: 输出 在try块中,值为:20 在finally块中,值为:40 在主方法中,值为:20 在从try块返回值之前,“x”的值在finally中设置为40。但这是将x的值返回到main方法中的20,而不是40 有人能解释一下,它是如何在内部工作的吗在java中,try或catch中的返回是如何工作的?,java,exception,try-catch-finally,Java,Exception,Try Catch Finally,根据答案,, 据说,如果在try/catch块中有return语句,那么在执行return语句之前,将执行finally块 但我看到以下代码的一些意外输出: 输出 在try块中,值为:20 在finally块中,值为:40 在主方法中,值为:20 在从try块返回值之前,“x”的值在finally中设置为40。但这是将x的值返回到main方法中的20,而不是40 有人能解释一下,它是如何在内部工作的吗 class ExceptionTest { private static int return
class ExceptionTest
{
private static int returnValue() {
int x = 10;
try {
x=20;
System.out.println("In try block, value is : " + x);
return x;
}
finally {
x = 40;
System.out.println("In finally block, value is : " + x);
}
}
public static void main (String[] args) throws java.lang.Exception
{
System.out.println("In main method, value is : " + returnValue());
}
}这被描述为“执行try finally和try catch finally”:
带有finally块的try语句通过首先执行try块来执行。还有一个选择:
- 如果try块的执行正常完成,则执行finally块,然后有一个选择:
- 如果try块的执行由于抛出值V而突然完成,则有一个选择:
- 如果try块的执行由于任何其他原因突然完成,则执行finally块,然后有一个选择:
- 如果finally块正常完成,那么try语句由于原因R而突然完成
x
值
您可以在以下内容中找到:
带有表达式的return语句试图将控制权转移到包含它的方法或lambda体的调用方;表达式的值成为方法调用的值。。。如果表达式的求值正常完成,并生成一个值V,那么return语句会突然完成,原因是返回值为V
您随后是否覆盖它并不重要:原因R(“返回值V”)是在执行finally之前确定的,因此这也是finally块突然完成的原因。您没有从
finally
返回,这就是变量保留在main
中赋值的原因。如果你最后也从返回它,它将是40,我发誓我在一周前看到了完全相同的问题。是的,就是这个问题。完全相同的情景。基本上,更改x
的值不会更改已调用的x
的返回值。该语句是正确的,它仍在执行finally,但此finally
块仅更改x
的值。return
已使用x
获取所需的值!它将不再查看x
。在执行finally之后,返回将“finish”从前面返回值。如果在finally块中执行了返回x
,则该值将被覆盖,因为返回
本身被覆盖。return
返回的是值而不是变量,可能这就是您感到困惑的原因。@Ankit关键是return语句返回的是表达式的值,而不是变量。您可以编写返回1
或返回somethod()代码>。这些结果不存储在变量中(它们只是保存在堆栈中),因此它们的返回值不可能通过在finally中执行某些操作来更新。如果返回x,则会很奇怪且不一致代码>有什么不同。