在Java中声明默认构造函数有什么意义吗?

Art*_*tic 4 java constructor

在Java中声明默认构造函数有什么意义吗?

class MyClass {
  public MyClass(){}
  public MyClass( T someArgs){
    //somecode
  }

}
Run Code Online (Sandbox Code Playgroud)

fas*_*ava 8

如果您有非默认构造函数,则默认构造函数不会隐式可用.如果你的目标不是让任何人做,那么不要放一个是个好主意:

MyClass myClass = new MyClass();
Run Code Online (Sandbox Code Playgroud)


cle*_*tus 6

如果您没有指定其他构造函数,Java会添加一个默认的public no-args构造函数,因此如果您需要一个构造函数,并且指定另一个构造函数,那么就有一个点.所以在你的情况下,如果你这样定义你的类:

class MyClass {
  public MyClass( T someArgs){
    //somecode
  }
}
Run Code Online (Sandbox Code Playgroud)

然后你不能这样做:

MyClass a = new MyClass();
Run Code Online (Sandbox Code Playgroud)

但如果定义如下:

class MyClass {
  // no constructors
}
Run Code Online (Sandbox Code Playgroud)

你可以.

通常,no-arg构造函数用于指定伪默认参数.例如:

class Switch {
  private boolean on;

  public Switch() { this(true); }
  public Switch(boolean on) { this.on = on; }
  public boolean isOn() { return on; }
  public boolean toggle() { on = !on; }
  public boolean set(boolean on) { this.on = on; return this.on; }
}
Run Code Online (Sandbox Code Playgroud)


Kon*_*rus 6

是的,当你有其他构造函数时.

  • 当您想要创建对象而不将任何参数传递给构造函数时,它是必需的.

  • 在大多数情况下,它是反射所必需的,特别是当您使用某些基于反射的框架和库(例如序列化,Hibernate,Hessian)时.

  • 通常使用setter可以为您提供更好的控制.它也适用于继承(在这里你需要为所有专用类显式调用构造函数,因为构造函数不是虚拟的.