【问题标题】:What is the purpose of parameterized constructors? [duplicate]参数化构造函数的目的是什么? [复制]
【发布时间】:2019-07-03 20:00:57
【问题描述】:

为什么要使用它们?顺便说一句,我是初学者。我理解初始化值的默认构造函数,因为它具有逻辑意义,但为什么要使用带参数的构造函数来表示实例变量 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 = "";
 }
}

【问题讨论】:

  • 考虑一个需要设置值才能有意义构造的对象。在这种情况下,您需要一个参数化构造函数而不需要非参数化构造函数,因此需要使用代码来提供值。
  • @DWuest this 关键字是可选的,因为局部变量的命名不同。
  • 您需要它来初始化您正在初始化的实例变量。您不需要的是默认构造函数中将它们初始化为默认值的代码:age = 0;.
  • 你的例子很好。如果您没有添加带有参数的构造函数,那么“MyCats”将永远不会有名称,并且它们的年龄都为“0”。多亏了那个参数化的构造函数,你的猫可以有实际的名字,而不是保持无名!对我来说,这就是足够的理由! (当然:不同的方法来实现这一点 - 你找到了),

标签: java parameters constructor


【解决方案1】:

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

MyCats a = new MyCats();
a.setAge(12);
a.setName("Foo");

你可以这样做:

MyCats a = new MyCats(12, "Foo");

更简单,嗯?

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 2016-03-26
    • 2021-07-02
    相关资源
    最近更新 更多