public class A {
}
public class B {
public static void b() {
System.out.println(A.class);
}
}
java -jar decompiler.jar B.class
拾取java_tool_options:'-dfile.encoding=utf8'
>
////由Procyon v0.5.30反编译//
public class B
{
public static void b() {
System.out.println(A.class); <<<
}
}
在Java5之前,像a.class
这样的类文本只是在句法上的一种糖分,用于在下面调用class.forname(“a”)
,将ClassNotFoundException
转换为NoClassDefFoundError
,并根据编译器的不同,将结果缓存在包含类的合成的Static
字段中,即B
。
原因是在Java1.1中引入了类文本作为语言特性,但是字节代码没有被改变以具有对它的特殊支持。
自Java5以来,类文本被视为实常量,使用一条ldc
或ldc_w
指令加载到操作数堆栈中,就像使用string
文本一样。区别在于常量池项的类型,它引用string_info
常量的string
和class_info
常量的class
。
否则,如果运行时常量池条目是对string
类实例的引用
,表示字符串文本(§5.1),那么对该实例的引用值被推送到操作数堆栈中。
否则,如果运行时常量池条目是对类的符号引用(§5.1),则解析命名类(§5.4.3.1),并将对表示该类值的类
对象的引用
推送到操作数堆栈中。
否则,运行时常量池条目必须是对方法类型或方法句柄的符号引用(§5.1)。解析方法类型或方法句柄(§5.4.3.5),并将对结果实例java.lang.invoke.MethodType
或java.lang.invoke.MethodHandle
值的引用
推送到操作数堆栈中。
问题内容: 我的编译器类正在创建一种我们打算编译为Java字节码的语言。我们已经取得了很大的进步,并且正在接近代码生成的时间。 我们在查找有关如何从编译器创建.class文件的信息时遇到问题。您有什么资源可以为我们提供帮助吗?我们已经有很多关于指令集的文档,但是需要有关如何直接填写类文件/十六进制编写的信息。 我们不需要有关反编译.class文件的信息或建议。 即使是从头开始编写.class文件的
问题内容: 我可以使用什么程序反编译类文件?我实际上会得到Java代码,还是仅仅是JVM汇编代码? 关于此站点上的Java性能问题,我经常看到“反编译” Java类文件以了解编译器如何优化某些东西的人们的回答。 问题答案: 有一些反编译器…快速搜索结果: Procyon: open-source (Apache 2) and actively developed Krakatau: open-so
问题内容: 如果我有一个字节变量: 为什么以下工作: …但这不是吗? 编译器第一理解为第二吗? [编辑] 我知道演员,但我想提请您注意 我认为它们是平等的,那么为什么编译器会有所不同呢?之间有什么区别 问题答案: 因为是的等效项,而的类型被提升为(JLS§5.6.2二进制数值提升),因此,如果不进行显式转换,则不能将其结果分配给它。 根据JLS,§15.26.2复合赋值运算符: 形式为E1 op
问题内容: 有什么方法可以对Java即时编译器生成的本机代码进行汇编转储吗? 和一个相关的问题:是否有任何方法可以使用JIT编译器而无需运行JVM将我的代码编译为本地机器代码? 问题答案: 是的,有一种方法可以打印生成的本机代码(需要OpenJDK 7)。 不,无法使用JDK的JIT将Java字节码编译为本地代码并将其另存为本地可执行文件。 即使这是可能的,它也可能没有您想象的有用。JVM进行了一
我正在玩基于Windows上的MoarVM构建的perl6版本。我创建了一些perl6文件并想将其编译为exe。我尝试了以下操作: 现在我想把r编译成可执行文件 我发现这个链接谈论如何使用鹦鹉,但我正在使用MoarVM目标:http://perlgeek.de/blog-en/perl-6/my-first-executable.writeback 我的问题如何将MoarvVM目标文件编译为Win
问题内容: 我目前正在翻译中编写一个针对Java字节码的玩具编译器。 我想知道是否可以在编写.class文件之前在发出的字节码中进行各种简单的窥孔优化的目录,也许是摘要。我实际上知道一些具有此功能的库,但是我想自己实现。 问题答案: 您知道Proguard吗?http://proguard.sourceforge.net/ 这是一个很棒的字节码优化器,它实现了很多优化。请参阅常见问题解答以获取列表