java - 为什么静态变量被认为是邪恶的?

标签 java static

我是一名刚刚进入企业界的 Java 程序员。最近我使用 Groovy 开发了一个应用程序和 java 。我编写的所有代码都使用了大量的静态数据。高级技术人员要求我减少静力学的使用数量。我在谷歌上搜索了同样的内容,发现许多程序员非常反对使用静态变量。

我发现静态变量使用起来更方便。而且我认为它们也很高效(如果我错了,请纠正我),因为如果我必须对类中的函数进行 10,000 次调用,我会很高兴将该方法设为静态并使用简单的 Class .methodCall() ,而不是用 10,000 个类实例来困惑内存,对吗?

此外,静态还减少了对代码其他部分的相互依赖性。他们可以充当完美的国家持有者。除此之外,我发现静态在某些语言中广泛实现,例如 SmalltalkScala 。那么,为什么程序员中(尤其是 Java 领域)普遍反对静态呢?

PS:如果我对静力学的假设有误,请纠正我。

最佳答案

静态变量代表全局状态。这很难推理,也很难测试:如果我创建一个对象的新实例,我可以在测试中推理出它的新状态。如果我使用使用静态变量的代码,它可能处于任何状态 - 并且任何东西都可能修改它。

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

关于java - 为什么静态变量被认为是邪恶的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57009525/

相关文章:

java - 文档监听器不活动 Java

java - 在 lightadmin 中记录操作

java - 如何在 java 中分离最后和剩余的所有单词?

c - GTK中静态编译如何处理FileChooser

java - 静态修饰符和静态 block 之间的区别

c++ - 静态常量变量的初始化

java - 获取月份的第一个星期一和最后一个星期日,跨越月份边界

java - Lucene 连字符词的索引/查询策略

reactjs - 如何将这个组件类变成纯函数无状态组件(Typescript + React)

c# - 将静态列表分配给非静态列表