如何检查由Java编译器隐式编写的Java内部代码



人们说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。

相关内容

  • 没有找到相关文章

最新更新