Java返回到调用堆栈中的位置N.

时间:2010-05-04 22:10:58

标签: java return callstack

在Java代码中使用return关键字将返回执行调用堆栈中的最后一段调用代码。如果对象foo调用baz.bar(),则return方法中的bar关键字将继续foo中的代码执行。

假设我的对象foo在上述方案中调用foofoofoofoofoo调用foofoofoo。在Java中是否仍然使用baz.bar()关键字或其他内容,以便return方法中的代码可以一直返回到bar

(没有例外)

3 个答案:

答案 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 ++,你可以做一个脏的小黑客,它会覆盖堆栈上的返回地址......