我最近不得不反编译一个项目.class文件。反编译工作得很好,除了现在代码我有这些奇怪的小片段:
break MISSING_BLOCK_LABEL_666;
Exception exception;
exception;
我注意到它中有一个模式,它似乎恰好出现在代码中'catch'语句的右括号之后。然而,我没有出现在每一个捕获语句之后......但是这是值得怀疑的。
如果有任何人在反编译后遇到这类问题,或者只是想知道为什么会这样,我真的很感激一些帮助!
如果您需要更多信息,请不要犹豫......
答案 0 :(得分:1)
我不知道这种特殊情况,但Java编译器做了很多改进和优化。因此,如果您对类进行反编译,您将看到此优化而不是原始代码。编译器解析了“Syntactic Sugar”(特殊代码形式,让你的生活更轻松),我认为你的问题是这样的。例如:您在代码中使用的每个公共静态final将在反编译代码中解析为其值(如Integer.MAX_INT),或者使用迭代器(for foo f: foos
)的for循环将在其他内容中解析。只需看看反编译的枚举器。
你不能依赖反编译器为你提供确切的代码,soeone写了,但为了给你编译器优化的代码。
答案 1 :(得分:0)
您的课程是否使用JDK 7编译? Java 7改进/扩展了try
和catch
子句。即使不使用新语法,编译器也可能会生成与之前略有不同的代码。这可能足以让反编译器感到困惑。