java - 什么时候使用静态方法和字段?

标签 java performance oop static

我知道静态是什么,但不确定何时使用它。

静态变量: 我只将它用于常量字段。有时一个类中有几十个常量,使用静态常量可以节省大量内存。还有其他典型用例吗?

静态方法: 我在上有关算法的类(class)时使用它。例如,一个提供不同排序算法的类。是否违反 OOP 设计?我认为最好保持这种方式而不是在每个需要使用它们的类中实现排序算法。我错了吗?有哪些好的用例?

此外,使用静态和非静态字段/方法之间是否存在任何性能差异?

最佳答案

您描述的是您使用静态的情况,但这并不能从根本上解释为什么您会使用静态与非静态 - 它们不仅仅是常量和实用方法的关键字。

当某物不是静态的(实例)时,这意味着该类的每个实例都有一个它的实例。每个都可以独立更改。

当某些东西是静态的时,这意味着对于该类的所有实例只有它的一个副本,因此从任何位置更改它都会影响所有其他地方。

静态变量/方法通常使用较少的内存,因为它们只有一个副本,无论您有多少个类实例。如果使用得当,静态在面向对象的设计中非常好。

如果您有一个只需要一个实例的方法/变量(例如常量或实用方法),那么只需将其设为静态即可。请理解,使方法静态化意味着它不能被覆盖。因此,如果您有一个要在子类中重写的方法,请不要将其设为静态。

一般的经验法则是 - 如果您只需要它的一个副本,请将其设为静态。如果每个实例都需要一个副本,则将其设为非静态。

关于java - 什么时候使用静态方法和字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43285402/

相关文章:

oop - 为什么没有为不同的返回类型定义方法重载?

php - 为对象动态添加私有(private)属性

java - 如何从java集合中的java对象访问变量?

java - 输入文本后如何从文本字段(密码)检索文本

java - 设置 Eclipse 以使用 Java EE

java - 如何从 WSDL 文件生成 java 类

.net - SqlBulkCopy 的建议批量大小是多少?

Java:如何避免 display() 和 write(pdf) 之间的代码重复

c++ - 我如何在 ubuntu 中分析 TLB 命中和 TLB 未命中

javascript - 这个脚本在做什么?