Java中的无参数构造函数和默认构造函数之间的区别

ami*_*ura 18 java constructor default-constructor

实际上我无法理解no-arg构造函数和默认构造函数之间的区别.

import javax.swing.*;

public class Test extends JFrame {
   public Test() {
     super();
     this.setSize(200,200);
     this.setVisible(true);
   }
   public static void main(Sting[] arg) {
       Test cFrame = new Test();
   }
}
Run Code Online (Sandbox Code Playgroud)

这是否在创建名为cFrame的Test对象时调用此类的默认构造函数?

Ell*_*sch 22

default构造函数是一个无参数的构造函数,代表您的Java编译器插入; 它包含defaultsuper();(not supper())的调用,这是默认行为.如果实现任何构造函数,则不再接收默认构造函数.

JLS-8.8.9.默认构造函数说(部分),

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

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

  • 我是任何调用`supper()`的忠实粉丝 (14认同)
  • @user3705478 抱歉造成误会;那条评论是开玩笑的。英文单词“supper”是一个用于用餐的古老术语,尤其是在晚上和有陪伴的情况下。同样,“叫去吃晚饭”是饭菜准备好的通知。 (2认同)

Abh*_*hek 7

default constructor是,Java编译器添加到您的代码,如果没有明确的构造函数可用的构造函数.默认构造函数调用没有args的超类构造函数.

如果添加了自己的构造函数(无论是没有参数还是带参数),编译器在这种情况下都不会添加默认构造函数.


Cod*_*eek 5

什么是默认构造函数?

如果尚未定义构造函数,则它是由编译器添加的构造函数.

如果您的类已经有构造函数,那么编译器将不会添加默认构造函数.

所以在你的情况下你有构造函数,

public Test(){
     super();
     this.setSize(200,200);
     this.setVisible(true);
   }
Run Code Online (Sandbox Code Playgroud)

因此,现在没有JVM调用的默认构造函数.