有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java反编译后的一些语法问题

我最近不得不反编译一个项目。类文件。反编译器运行得非常好,除了在代码中我有以下奇怪的小片段:

break MISSING_BLOCK_LABEL_666;
Exception exception;
exception; 

我注意到其中有一个模式,它似乎出现在代码中“catch”语句的右括号之后。但是,我不会出现在每个捕获语句之后。。。但这是值得怀疑的

如果有人在反编译后遇到过这种问题,或者只是想知道为什么会发生这种情况,我将非常感谢您的帮助

如果您需要更多信息,请随时询问


共 (2) 个答案

  1. # 1 楼答案

    您的类是否使用JDK 7编译?Java7改进/扩展了trycatch子句。即使没有使用新语法,编译器生成的代码也可能与以前略有不同。这可能足以让反编译器感到困惑

  2. # 2 楼答案

    我不知道这种特殊情况,但是Java编译器做了很多改进和优化。因此,如果您反编译这些类,您将看到这种优化,而不是原始代码。编译器解决了“语法糖”(使您的生活更轻松的特殊代码形式),我认为您的问题就是这样。例如:您在代码中使用的每个公共静态final将在反编译代码中解析为其值(如Integer.MAX_INT),或者对于带有迭代器(for foo f: foos)的循环,将在其他内容中解析。只要看看反编译的枚举器

    你不能依靠反编译器来给你精确的代码,soeone已经写过了,但是要给你编译器优化过的代码