在Java代码中使用return
关键字将返回执行调用堆栈中的最后一段调用代码。如果对象foo
调用baz.bar()
,则return
方法中的bar
关键字将继续foo
中的代码执行。
假设我的对象foo
在上述方案中调用foofoo
,foofoofoo
调用foofoofoo
。在Java中是否仍然使用baz.bar()
关键字或其他内容,以便return
方法中的代码可以一直返回到bar
?
(没有例外)
答案 0 :(得分:2)
不,这是不可能的。你必须自己通过代码来处理这个问题,一次一个级别(异常会做同样的事情,它只是自动化了一点)。
然而,无论如何这样做可能不是一个好主意。假设您突然需要从baz.bar()
致电quux
,而根本不会触及foo
。如果bar
尝试返回foo
,而不在调用堆栈中,那么现在该怎么办?如果你只是希望它上升到N级,你能想象如果你将foofoofoo
合并到foofoo
中,或者将其更改为添加foofoofoofoo
而可能会发生的问题,而不记得修改bar
?
异常听起来就像是这项工作的正确工具:baz.bar()
不应该关心它必须转到foo
,它应该知道发生了异常的事情,要求它中止它正在做的事情,然后foo
应该知道这种特殊情况可以发生并处理它(即使它只是无所事事就是这种情况)。如果要避免必须为所有内容添加throws子句,请使用未经检查的异常。
答案 1 :(得分:1)
幸运的是,这在Java中是不可能的。
在极少数情况下类似的事情是有意义的,例如在OS内核中执行上下文切换时。
但在应用程序中这绝对是错误的。
答案 2 :(得分:0)
我不是一个巨大的Java家伙,所以我不能肯定地说,但这听起来不安全,我怀疑这将在Java中得到支持。
现在是这个C / C ++,你可以做一个脏的小黑客,它会覆盖堆栈上的返回地址......