代码调用新的GenericObject()但GenericObject.java没有构造函数

Mit*_*tch 1 java compiler-construction constructor

我正在查看一些我正在使用的代码,其中有一点特别让我感到震惊:

在文件中有一个块:

public void prepare(){
    if (this.GenericObjectID != null) 
         doStuff();
    else{
         this.GenericObjet = new GenericObject();
    }
Run Code Online (Sandbox Code Playgroud)

但是,当我浏览时,GenericObject.java根本就没有构造函数.代码运行,但我没有写它,所以我不是肯定的(还是!).所以我的问题是:这怎么可能?什么是java编译器在看到此调用时所做的事情,但是文件中没有描述该对象的构造函数?

rge*_*man 6

如果没有显式构造函数,那么编译器会创建一个没有参数的隐式默认构造函数,它只会隐式调用超类构造函数.

JLS的第8.8.9节讨论了默认构造函数:

如果类不包含构造函数声明,则隐式声明默认构造函数.顶级类,成员类或本地类的默认构造函数的形式如下:

  • 默认构造函数具有与类相同的可访问性(第6.6节).

  • 默认构造函数没有形式参数,除非在非私有内部成员类中,默认构造函数隐式声明一个形式参数,表示该类的直接封闭实例(§8.8.1,§15.9.2,§15.9.3) ).

  • 默认构造函数没有throws子句.

  • 如果声明的类是原始类Object,则默认构造函数具有空体.否则,默认构造函数只调用不带参数的超类构造函数.