【问题标题】:Is static a useful modifier for a private string [duplicate]静态是私有字符串的有用修饰符吗?
【发布时间】:2019-07-08 08:56:52
【问题描述】:

在我的团队中,我们进行了一次小型讨论,如果在一个类中声明为“private static final”的字段与仅将其声明为“private final”相比有什么优势。 例如,如果我的班级中有以下行:

private static final String a = "a String";

这真的比像这样声明更好吗:

private final String a = "a String";

如果它是一个可以在这个类之外使用的变量,那么将它声明为静态是完全有意义的。但是由于它是私有的,除了静态变量只创建一次并且在所有对象中都被引用之外,我没有看到任何真正的优势。我们有很多测试,这些测试定义了这样的变量。这些测试仅在系统启动时运行一次,之后不再需要。除此之外,我还缺少什么吗?

【问题讨论】:

  • 每次创建所述类型的实例时,都不会重新初始化静态字段。
  • 如果内容始终保持不变,我认为没有理由在没有 static 的情况下声明类似 final 的内容。您不必要地创建新对象。对于String,这种开销是最小的,因为实际的文本是实习的,但是如果您在生产代码中创建了更复杂的对象并“忘记”将它们设为静态,您可能会遇到甚至可能没有意识到的性能问题。最好养成将它们设为静态的习惯。
  • 同样声明静态不会影响内存印记/序列化和上述类型的什么
  • 另一个区别是静态变量可以通过静态和非静态方法访问。实例变量不能被静态方法访问。
  • 从使用角度看。在您可能拥有的任何静态方法中只能访问静态变量。如果没有静态方法,那么它基本上是一个单例常量。

标签: java string static variable-declaration


【解决方案1】:

简而言之:

当您只需要设置一次值时使用private final,但该类的每个实例的值需要不同。

当您的类的所有实例都需要访问一个不变的值时,您使用private static final。它对于避免魔术字符串/数字和增强可读性很有用,特别是如果您的值是较长的字符串。如果您开始定义太多这些,请考虑将它们移动到配置文件中。

所以 static 与 final 和 private 结合当然是有用的,但是static通常需要小心谨慎地使用。不要只是把它打在所有东西上;相反,您的默认操作应该是分析您是否需要它,并相应地实施。

【讨论】:

  • “您的默认操作应该是将您的字段保持在每个实例级别。”。我不同意。您的默认操作应该是分析您的需求和您的目标是什么,并根据该选择您的方法。
  • 很公平,我会编辑以包含它。
猜你喜欢
  • 2013-03-18
  • 1970-01-01
  • 2011-05-03
  • 2011-11-11
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 2010-09-13
相关资源
最近更新 更多