答案 0 :(得分:7)
JVM使用值堆栈来保存值,并且该线程上的所有方法调用共享堆栈。通常,当一个非void方法返回时,返回值被压入堆栈,调用者将它从堆栈中弹出并使用它或丢弃它。
答案 1 :(得分:2)
return
Statement [...]
return
语句,没有表达式 尝试将控制权转移给包含它的方法或构造函数的调用者。[...]
return
语句,表达式 尝试将控制权转移给包含它的方法的调用者; Expression 的值成为方法调用的值。[...]然后可以看出,返回语句总是突然完成。
突然完成 意味着以下任何语句都不会被执行,这实际上会在某些情况下导致编译时错误(JLS 14.21 Unreachable Statements)
void unreachable() {
return;
System.out.println("Bye!"); // DOESN'T COMPILE! Unreachable code!
}
继续......
前面的描述说“尝试转移控制权”而不仅仅是“转移控制权”,因为如果有任何
try
语句[...]则任何finally
条款[...]将被执行[...]突然完成finally
条款可能会破坏由return
语句启动的控制权转移。
这意味着以下功能将return -1
代替0
。
int tryReturn() {
try {
return 0;
} finally {
return -1;
}
}
如果没有try-finally
,控件将立即转移, Expression 值(如果有)将传递给调用者。