Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 静态类/字段。你多久用一次?_Java_Design Patterns - Fatal编程技术网

Java 静态类/字段。你多久用一次?

Java 静态类/字段。你多久用一次?,java,design-patterns,Java,Design Patterns,有时,由于静态数据的原因,很难在应用程序中找到错误。在OOP中使用静态数据是一种好方法,还是最好避免它? 提前谢谢 更新: 您使用静态类的频率有多高?使用静态类的目的是什么?一般来说,静态方法会导致代码很难测试,因为 我们不知道是否有其他类改变了可能的状态 我们不能轻易地模拟或切换出静态实现 不过有一些有效的用例 实现单例模式的步骤 提供构造逻辑(例如,命名工厂方法),例如 后者的一个例子是 我通常不会使用静态方法,默认原则是任何静态内容的存在都需要激励 正如@Louis所指出的

有时,由于静态数据的原因,很难在应用程序中找到错误。在OOP中使用静态数据是一种好方法,还是最好避免它? 提前谢谢

更新:


您使用静态类的频率有多高?使用静态类的目的是什么?

一般来说,静态方法会导致代码很难测试,因为

  • 我们不知道是否有其他类改变了可能的状态
  • 我们不能轻易地模拟或切换出静态实现
不过有一些有效的用例

  • 实现单例模式的步骤
  • 提供构造逻辑(例如,命名工厂方法),例如
    • 后者的一个例子是
我通常不会使用
静态
方法,默认原则是任何
静态
内容的存在都需要激励


正如@Louis所指出的,
static
变量对于提供单实例常量非常有用。通常,这也适用于保存对象(如记录器)的成员变量

不应过度使用Static,但在某些情况下,应该使用Static方法来提供与实例对象没有直接关系的工厂方法或助手方法

静态方法每次您想要执行与类相关而不是与对象实例相关的操作或表示数据时都是值得的,因此使用静态的方法根本不应该被避免,而应该仅在真正需要时使用


在大多数情况下,你的问题没有绝对的答案(避免或不使用静态),这取决于上下文,但是你不应该滥用静态…

静态常量也可以,只要它们是真正不可变的。我对无状态静态方法也很好:
Math.sqrt
,例如但OP似乎指的是“静态数据”,我认为这意味着“存在状态”