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

2022-09-02 03:02:09

实际上我无法理解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();
   }
}

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


答案 1

构造函数是 Java 编译器代表您插入的无 args 构造函数;它包含对 (not ) 的调用,这是默认行为。如果实现任何构造函数,则不再收到默认构造函数。defaultdefaultsuper();supper()

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

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

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


答案 2

是一个构造函数,如果没有可用的显式构造函数,Java 编译器会将其添加到代码中。默认构造函数调用不带参数的超类构造函数。default constructor

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