【发布时间】:2021-12-03 03:00:32
【问题描述】:
人们说 Java 中有一些代码是强制性的,即使程序员没有编写它们。 Java 编译器自己隐式编写。
就像我的代码是这样的
class Test {
public static void main(String args[]) {
Test obj = new Test();
}
}
这里我没有写默认构造函数,也就是说Java编译器会自己隐式写出来的。
这意味着我的 Test.class 文件中有一个默认构造函数。
如果我反编译我的 Test.class 文件,它应该看起来像这样
class Test {
Test() {
super();
}
public static void main(String args[]) {
Test obj = new Test();
}
}
为什么我反编译的时候java文件中没有显示任何默认构造函数?
【问题讨论】:
-
反编译器并不是学习编译器功能的完美工具,因为它们知道并对其中一些隐含的决定做出反应。如果您想知道 Java 编译器究竟做了什么,您应该熟悉
javap命令的输出,它在相当低的级别向您显示 .class 文件究竟包含什么(尤其是使用-v调用时)。
标签: java internals compiled-language