参数化构造函数的目的是什么?

Jan*_*nie -2 java parameters constructor

他们为什么要用?顺便说一下,我是初学者.我理解初始化值的默认构造函数,因为它具有逻辑意义,但为什么使用带参数的构造函数来表示实例变量age例如等于a.什么目的?没有它,只有初始化构造函数会发生什么?这里提出的其他问题没有意义,例如:

public class MyCats {
    private int age;
    private String name;

 public MyCats(int a, String n) {  // why do I need this?
    age = a;
    name = n;
 }

 public MyCats() {
   age = 0;
   name = "";
 }
}
Run Code Online (Sandbox Code Playgroud)

Lua*_*ico 6

这是为了轻松创建您的类而无需额外的代码.例如,而不是做:

MyCats a = new MyCats();
a.setAge(12);
a.setName("Foo");
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

MyCats a = new MyCats(12, "Foo");
Run Code Online (Sandbox Code Playgroud)

更简单,哼哼?

其他原因你可能更喜欢后者,如果短缺是不够的:

  • 您可以使用提供的值初始化依赖于构造函数内的多个字段的所有计算字段.
  • 您可以在无效参数的情况下验证输入和抛出异常,即使对于需要多个参数的检查也是如此.
  • 如果您的字段是最终字段且您的类不可变,则必须这样做,在这种情况下,没有可用的setter.

大多数情况下,在最后一种情况下,能够在构造时检查正确性并禁止任何对象处于无效状态非常有用,以后可以节省大量错误.