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

时间:2016-02-29 04:12:49

标签: java constructor jvm javac

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

示例代码:

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

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

的对象,我可以理解这一点

2 个答案:

答案 0 :(得分:2)

JLS requires that a default constructor be generated

  

8.8.9。默认构造函数

     

如果类不包含构造函数声明,则隐式声明默认构造函数。

此外:

  

我没有创建这个类的任何实例

无关。编译器无法知道。

答案 1 :(得分:0)

你如何设想编译器会知道你没有从其他类中做new TheClass()

此外,JLS 8.8.9说:

  

如果一个类不包含构造函数声明,则隐式声明一个没有形式参数且没有throws子句的默认构造函数。

编译器必需这样做。