gpt4 book ai didi

java - 类文件中的默认构造函数

转载 作者:行者123 更新时间:2023-12-01 21:41:19 25 4
gpt4 key购买 nike

如果我不提供任何构造函数,编译器将为该类创建一个默认构造函数。

该默认构造函数是否存在于类文件中?

如果不存在,那么虚拟机如何运行类文件并为该类创建对象?

更新1:

我已经创建了一个类文件,

public class ConstructorExp {   
public static void main(String[] args){
ConstructorExp e = new ConstructorExp();
}
}

借助反编译器,我反编译了类文件,

/*
* Decompiled with CFR 0_114.
*/
public class ConstructorExp {
public static void main(String[] arrstring) {
ConstructorExp constructorExp = new ConstructorExp();
}
}

如您所见,没有默认构造函数!

最佳答案

Will that default constructor be present in the class file?

是的,会的。

您可以自己检查这一点,方法是创建一个具有默认构造函数的类,编译它,然后使用 JDK 中包含的 javap 实用程序检查它。

这是我执行此操作时会发生的情况。

[stephen@blackbox tmp]$ cat Test.java
public class Test {}
[stephen@blackbox tmp]$ javac Test.java
[stephen@blackbox tmp]$ javap -c Test
Compiled from "Test.java"
public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
}
[stephen@blackbox tmp]$

QED

<小时/>

With the help of decompiler, I decompiled the class file [and there is no default constructor in the output]

有趣。然而,这并不能证明任何事情1

实际发生的是反编译器:

  • 在 .class 文件中看到无参数构造函数,其主体相当于 super();
  • 发现没有其他构造函数
  • 意识到构造函数可以表示为默认构造函数
  • 不输出构造函数的任何源代码...因为代码是多余的。

1 - ...除了反编译器有点聪明之外。

关于java - 类文件中的默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36402955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com