我有与java编译器相关的问题。
示例代码:
public class TheClass
{
public static void main(String[] args)
{
System.out.println("Hello world!");
}
}
当我编译这个类时,我可以在JavaClassViewer中看到,这个类包含调用<init>
construcotr的java.lang.Object
方法,但是我没有创建这个类的任何实例,也没有任何构造函数叫做。
JVM调用静态方法main,但它不创建类的实例。那么,为什么编译器会生成<init>
方法呢?如果我要创建TheClass
答案 0 :(得分:2)
JLS requires that a default constructor be generated:
8.8.9。默认构造函数
如果类不包含构造函数声明,则隐式声明默认构造函数。
此外:
我没有创建这个类的任何实例
无关。编译器无法知道。
答案 1 :(得分:0)
你如何设想编译器会知道你没有从其他类中做new TheClass()
?
此外,JLS 8.8.9说:
如果一个类不包含构造函数声明,则隐式声明一个没有形式参数且没有throws子句的默认构造函数。
编译器必需这样做。