java - 为什么 javac 在不创建任何实例的类中创建 <init> 方法

标签 java constructor jvm javac

我有与 java 编译器相关的问题。

示例代码:

public class TheClass
{
    public static void main(String[] args)
    {
        System.out.println("Hello world!");
    }
}

当我编译这个类时,我可以在 JavaClassViewer 中看到,此类包含<init>调用 java.lang.Object 的方法construcotr,但我没有创建此类的任何实例,也没有调用任何构造函数。 enter image description here JVM 调用静态方法 main,但它不会创建类的实例。那么,为什么编译器会生成 <init>方法?如果我创建 TheClass 的对象,我就能理解这一点

最佳答案

JLS requires that a default constructor be generated :

8.8.9. Default Constructor

If a class contains no constructor declarations, then a default constructor is implicitly declared.

另外:

i am not creating any instance of this class

无关紧要。编译器无法知道这一点。

关于java - 为什么 javac 在不创建任何实例的类中创建 <init> 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35691860/

相关文章:

Java 将 double 更改为 Date

c++ - 在其他类构造函数中使用参数化构造函数

java 多个构造函数

java - HotSpot 可以内联 lambda 函数调用吗?

security - Grails 和运行时动态修改

java - 核心 API 调用 System.gc()

java - 需要在集群环境中工作的 Java Web 应用程序的关键考虑因素/陷阱?

java - 如何将失败的 Cucumber 步骤的屏幕截图准确地附加到 Allure 报告中,而不是在“Tear Down”部分中?

java - 模拟类的构造函数内的方法

java - 应用程序在开始新 Activity 时崩溃