在 Java 代码中使用return
关键字会将执行返回到调用堆栈中的最后一段调用代码。如果对象foo
调用baz.bar()
,方法return
中的关键字bar
将继续执行代码foo
。
假设我有foo
调用上述场景foofoo
中调用的对象,并调用. 无论如何在Java中使用关键字或其他东西,以便方法中的代码可以一直返回到?foofoofoo
foofoofoo
baz.bar()
return
bar
foo
(没有例外)
不,这是不可能的。您必须自己通过代码处理这个问题,一次一个级别(异常也会这样做,只是自动化程度更高)。
但是,无论如何,这样做可能不是一个好主意。假设您突然需要从 调用baz.bar()
,而根本quux
没有接触foo
。如果bar
尝试返回foo
不在调用堆栈中的 ,现在应该发生什么?如果你只是想让它升N级,你能想象如果你合并foofoofoo
到foofoo
,或者改变它添加一个foofoofoofoo
,而不记得修改可能发生的问题bar
吗?
一个异常听起来与这项工作的正确工具完全一样:baz.bar()
不应该关心它必须去foo
,它应该知道发生了一些异常情况,要求它中止它正在做的事情,然后foo
应该知道这种异常情况可能会发生并且处理它(即使它什么都不做也是这种情况)。如果是为了避免必须向所有内容添加 throws 子句,请改用未经检查的异常。
幸运的是,这在 Java 中是不可能的。
在极少数情况下类似的事情是有意义的,例如当您在操作系统内核中进行上下文切换时。
但在应用程序中这样做绝对是错误的。
我不是一个 Java 大佬,所以我不能肯定地说,但这听起来并不安全,我怀疑 Java 是否支持这一点。
现在是这个 C/C++,你可以做一个肮脏的小黑客,会覆盖堆栈上的返回地址......