2012-12-21 58 views
-1

其实我试图研究它混淆与GOTO语句 说代码..实现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和IF组合)为使他们难以阅读反编译的类文件。

编辑

Becoz我以为反编译的类文件会完全的征税Java语法,我张贴了这个问题,但代替反编译,生成pseudocodes往往还保留一些本地语法。是的,没有转到,但它只是虚拟关键字,是LABEL3可能会返回和其他人无法访问。

+0

这是什么语言?问题被标记为'[java]',但代码显然不是Java。 – NPE

+0

绝对不是java – Alp

+0

只需调试它,你就会看到工作流程。 – 2012-12-21 09:48:56

回答

1

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

其实,我想知道return;之后所有这些东西是用来做什么的。它不应该被调用,因为在return(标签)之后没有其他入口点。

3

这段代码看起来像JAD的输出时,它是不能完全反编译的.class

如果是这样的情况下,(在类文件的末尾在Java注释)检查错误。它可能会有一些关于你发布的代码块。

+0

是的,其实他们没有生成Java源代码,但伪代码..并没有任何错误日志,没有任何.. – everlasto

+0

您应该查看java文件末尾的源代码中的注释,并在反编译时引用错误。它通常发生在静态块或静态声明中。 – richardtz

+0

我忘记提及它在反编译同步块时总是发生。 – richardtz