小编典典

为什么说java中的静态变量尽量不要使用?

java static

为什么说java中的静态变量尽量不要使用?


阅读 2161

收藏
2020-01-10

共1个答案

小编典典

静态变量表示全局状态。这很难推理,也很难测试:如果创建对象的新实例,则可以在测试中推断其新状态。如果我使用的代码使用的是静态变量,则它可能处于任何状态-任何事情都可能对其进行修改。

我可以继续进行一段时间,但是要考虑的更大概念是,事物的范围越紧密,就越容易进行推理。我们善于思考小事情,但是如果没有模块化,就很难对一百万行系统的状态进行推理。顺便说一下,这适用于各种各样的事物-不仅是静态变量。

总结了在Java中使用静态方法的一些基本优点和缺点:

优点:

  1. 可全局访问,即不与任何特定对象实例绑定。
  2. 每个JVM一个实例。
  3. 可以通过使用类名来访问(不需要对象)。
  4. 包含适用于所有实例的单个值。
  5. 在JVM启动时加载并在JVM关闭时死亡。
  6. 他们不修改对象的状态。

缺点:

  1. 无论是否使用静态成员,静态成员始终是内存的一部分。
  2. 你无法控制静态变量的创建和销毁。有用的是,它们是在程序加载时创建的,并在程序卸载时(或在JVM关闭时)销毁。
  3. 你可以使用sync使statics线程安全,但是你需要付出额外的努力。
  4. 如果一个线程更改了静态变量的值,则该静态变量可能会破坏其他线程的功能。
  5. 你必须先了解“静态”才能使用它。
  6. 你不能覆盖静态方法。
  7. 序列化不适用于它们。
  8. 他们不参与运行时多态。
  9. 如果使用了大量的静态变量/方法,则存在内存问题(在某种程度上但我猜不是很多)。因为在程序结束之前不会收集它们。
  10. 静态方法也很难测试。
2020-01-10