人们说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文件,当我反编译?
您的反编译器可能不一定显示默认的actor,因为它知道它的隐式。这是该编译器实现者的设计决定,可以通过一些设置进行配置。
然而,它显然以字节码的形式出现——编译以下java代码:
class A {}
,然后用javap -c A.class
对其进行反汇编,显示了一个默认构造函数:
Compiled from "A.java"
class A {
A();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
}
当然,它什么也不做,只是加载this
,将其压入堆栈,然后调用无参数超类ctor。