-1

实际上我正在尝试研究一个被 GOTO 语句混淆的代码说..

private void fun()
{
if(somecondition)
    goto LABEL3;

...
...

LABEL3:
    return;
    Exception e;
    e;
    if(true) goto LABEL3; else LABEL7;


...
...

LABEL7:
    //some statements
}

并且在通过 IF 语句调用 LABEL3 时,
函数会停止吗?LABEL7会被调用吗?
程序将如何进行?

这是一个反编译的 java 类文件
反编译的类文件,其中一些语句被 goto 替换(例如,带有 goto 和 IF 组合的 WHILE),使它们难以阅读。

编辑

因为我认为反编译的类文件将完全不符合 java 语法,所以我发布了这个问题,但反编译器通常用于生成伪代码,但保留了很少的本机语法。是的,没有 goto,但它只是虚拟关键字,是的 LABEL3 可能会返回而其他人无法访问。

4

2 回答 2

3

这段代码在无法完全反编译 .class 时看起来像 jad 的输出

如果是这种情况,请检查错误(在类文件末尾的 java 注释中)。它可能会有一些关于您发布的代码块的信息。

于 2012-12-21T09:52:03.300 回答
1

如果条件if(somecondition)成立,函数将退出。因此,LABEL7不会被调用。 return应该表示“从函数返回”而不是从 goto 块返回。至少如果 Java(或其他语言,从注释看来不是 Java)没有改变gotoand的通常定义return

实际上,我想知道所有这些东西return;是为了什么。return它永远不应该被调用,因为(label)之后没有其他入口点。

于 2012-12-21T09:50:37.447 回答