从函数返回值

时间:2010-04-24 14:51:19

标签: java function stack return-value return

如何从函数内部返回值?

参见此示例..

alt text http://img708.imageshack.us/img708/6853/stack.png

2 个答案:

答案 0 :(得分:7)

JVM使用值堆栈来保存值,并且该线程上的所有方法调用共享堆栈。通常,当一个非void方法返回时,返回值被压入堆栈,调用者将它从堆栈中弹出并使用它或丢弃它。

答案 1 :(得分:2)

JLS 14.17 The 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 值(如果有)将传递给调用者。