Java 为什么静态变量不好?

Java 为什么静态变量不好?,java,static,Java,Static,我听过这么多不同的意见,并没有真正找到这个问题的确切答案。静态变量何时/为什么不好 如果我想在一个列表中存储游戏中玩家的名字,让它非静态会比静态好吗?若然,原因为何 每次玩家离开/加入时,该列表都会更新。它将用于显示其他玩家正在玩游戏,并跟踪他们的游戏时间。静态变量不一定是坏的,但软件设计的一个主要原则是,您应该包含需要知道的最小上下文的信息。如果在一个类的所有实例之间共享一个变量是有意义的——logger对象是一个常见的例子——那么将其设为静态就可以了。如果有一个以上的版本或副本是有意义的,就

我听过这么多不同的意见,并没有真正找到这个问题的确切答案。静态变量何时/为什么不好

如果我想在一个列表中存储游戏中玩家的名字,让它非静态会比静态好吗?若然,原因为何


每次玩家离开/加入时,该列表都会更新。它将用于显示其他玩家正在玩游戏,并跟踪他们的游戏时间。

静态变量不一定是坏的,但软件设计的一个主要原则是,您应该包含需要知道的最小上下文的信息。如果在一个类的所有实例之间共享一个变量是有意义的——logger对象是一个常见的例子——那么将其设为静态就可以了。如果有一个以上的版本或副本是有意义的,就像一个游戏的玩家(认为多个游戏同时运行)一样,那么最好将列表放在尽可能小的(非静态)上下文中。

静态变量使得将数据视为函数的输入/输出变得更加困难,因为任何函数都可以访问静态。当您获得数千行或上万行代码时,它就会成为一个问题。在您的第一个小应用程序中没有这么多


“泄漏内存”也更容易,因为静态程序的生命周期与程序的生命周期相同,这意味着在pogram关闭或代码将其置空之前,它永远不会被垃圾收集。

对于SO格式来说,这个问题恐怕过于宽泛和基于观点。你能试着把它缩小到一个特定的情况下,显示你当前的代码吗?它们不是“坏的”,但它们通常是错误的。许多bug是通过删除“static”修复的,很少是通过插入它来修复的。大多数情况下,您需要实例状态。它是静态页面上的一个小列表吗?您是否在不同的页面之间移动,并在多个位置加载相同的列表?你多久编辑一次?给我们一个场景!每件事都不坏每件事都有可能重复它们不允许多个内容实例(显然),它们不鼓励封装或控制,它们引入了引用问题,因为在您不知情的情况下很容易突然更改引用(请参见下面的许多问题),他们不鼓励OO或OO设计原则,他们散发着糟糕设计的臭味……如果仍然有对它的引用,即使引用是静态的,即使对象不再需要,这也不是内存泄漏。有引用,这仍然是某种泄漏。这是应用程序内存不足的一个常见原因b/c它们引用了它们不需要的内容。现在你添加了引号,这是一个更容易接受的说法。