【问题标题】:Is it okay to not use a constructor in a class?在类中不使用构造函数可以吗?
【发布时间】:2020-02-09 18:14:10
【问题描述】:

我有一个类,它有一些私有静态最终字段(不确定调用这些常量是否正确),以及另一个实例变量设置为私有,它是私有静态最终字段之一的直接副本。

每次从其他类创建对象时,我希望它具有相同的变量,因为它们是在类中分配的,并且无需创建构造函数,Java 允许我访问所有具有正确返回的方法,因为我会期待的。

这种情况下不创建构造函数可以吗?

【问题讨论】:

  • 不确定我是否理解您的问题,但在 Java 中,会自动为所有未明确定义自己的构造函数的类创建一个隐式无参数构造函数。
  • 代码值 1024 字。

标签: java class object constructor


【解决方案1】:

您的问题至少有两个答案:

  1. 在你的类中不包含构造函数很好。 Java 编译器会为你添加一个默认的零参数构造函数。

  2. 听起来你一开始就不应该构造你的类的实例。 :-)

你说过

每次从其他类创建对象时,我希望它具有相同的变量,因为它们是在类中分配的,并且无需创建构造函数,Java 允许我访问所有具有正确返回的方法,因为我会期待的。

听起来你大致有:

class TheClass {
    public final SomeType variable = /*...*/;
    // ...
}

...而你正在这样做:

TheClass instance = new TheClass();
doSomethingWith(instance.variable);

没有理由在那里创建实例,直接使用类名即可:

doSomethingWith(TheClass.variable);

Java 有点有趣,因为它允许您通过实例引用 (instance.variable) 访问 static 成员,但访问它们的正常方式是通过类 (TheClass.variable)。

此外,如果您的 static 成员不是 final,您可能会遇到一些非常令人困惑的行为:

TheClass a = new TheClass();
a.variable = 1;
TheClass b = new TheClass();
b.variable = 2;
System.out.println(a.variable); // 2?!?!?!

所以一般来说,最好避免通过实例引用访问static 成员。

或者,将类改为具有实例(非static)成员的单例。

【讨论】:

  • 感谢您的及时回复。我了解到直接访问类变量,将类变量设置为public是我不应该做的,所以三个变量设置为private,两个是private static final,一个是private - 没有直接访问。对于常规私有变量,方法访问和更新它,而对于私有静态最终变量,方法仅将其用作参考(检查值,将其中一个复制到私有作为重置)。只使用dsomethingwith(TheObjectName.method),从不使用(theObjectName.variable)。
猜你喜欢
  • 1970-01-01
  • 2017-11-13
  • 2016-07-21
  • 2010-12-19
  • 1970-01-01
  • 2014-05-22
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多