当前位置: 首页 > 知识库问答 >
问题:

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

樊琦
2023-03-14

实际上,我不明白无参数构造函数和默认构造函数的区别是什么。

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的Test对象时,是否调用此类的默认构造函数?

共有3个答案

贾俊喆
2023-03-14

什么是默认构造函数?

如果尚未定义构造函数,则编译器将添加该构造函数。

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

所以在你的例子中,你有构造器,

public Test(){
     super();
     this.setSize(200,200);
     this.setVisible(true);
   }

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

湛鸿
2023-03-14

默认构造函数是Java编译器在没有显式构造函数可用时添加到代码中的构造函数。默认构造函数调用不带参数的超类构造函数。

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

程鸿畅
2023-03-14

default构造函数是Java编译器代表您插入的无参数构造函数;它包含对super()的default调用 (不是super()),这是默认行为。如果您实现了任何构造函数,那么您将不再收到默认构造函数。

JLS-8.8.9。默认构造函数表示(部分),

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

如果要声明的类是原始类对象,则默认构造函数的主体为空。否则,默认构造函数只调用不带参数的超类构造函数。

 类似资料:
  • 问题内容: 其实我不明白,无参数构造函数和默认构造函数有什么区别。 创建名为cFrame的Test对象时,这是否调用此类的默认构造函数? 问题答案: 该构造函数是一个无参数的构造函数,代表您的Java编译器插入; 它包含对(not )的调用,这是默认行为。如果实现任何构造函数,则不再收到默认的构造函数。 JLS-8.8.9。默认构造函数说(部分), 如果一个类不包含构造函数声明,则隐式声明一个没有

  • 问题内容: 默认构造函数到底是什么?你能告诉我以下哪个是默认构造函数,它与其他构造函数有何不同? 问题答案: 他们都不是。如果定义,则不是默认值。 除非你定义另一个构造函数,否则默认构造函数是自动生成的无参数构造函数。任何未初始化的字段都将设置为其默认值。对于你的榜样,它看起来像这样假设的类型String,int以及int,那类本身是公共的: 这与 完全没有构造函数。但是,如果定义至少一个构造函数

  • 问题内容: 我知道我在这里问一些严重的101问题… 我有一些课,还有一个延伸课。在我有一个构造函数,它接受一组参数,并对其字段进行设置。派生类(例如)通常不需要进行修改。现在我的IDE给我 “ Foo中没有默认的构造函数” 。从一点点谷歌搜索,这似乎是因为“构造函数没有继承”。因此,一切都很好,但是我现在如何使它工作而不在每个派生类中复制此构造函数?我假设有一个更合理的方法? 问题答案: 使用构造

  • 本文向大家介绍解析C++中构造函数的默认参数和构造函数的重载,包括了解析C++中构造函数的默认参数和构造函数的重载的使用技巧和注意事项,需要的朋友参考一下 C++构造函数的默认参数 和普通函数一样,构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参取默认值。 【例】 程序运行结果为: 程序中对构造函数的定义(第12-16行)也可以改写成参数初始化

  • 问题内容: 不知何故,在下面的Node类中,and变量在Node的所有实例之间共享。 有什么办法可以让我继续使用构造函数参数的默认值(在这种情况下为空列表),但要同时获取它们和拥有其自身的变量以及变量? 我正在使用python 3.1.2。 问题答案: 可变的默认参数通常不会执行您想要的操作。相反,请尝试以下操作:

  • 当Java中给出参数构造函数时,为什么默认的无参数构造函数会失败? 这个设计有什么意义? 例如: