java - System.setProperty 还是公共(public)静态变量?

标签 java static

据我了解,System.setProperty(“key”,”value”)System.getProperty(“key”) 用于保存和检索系统属性和用户定义的属性。可以在应用程序内的任何位置访问设置的值。

此外,我知道当一个变量被声明为 publicstatic 时,它就变成了一个常量,并且在应用程序中的任何地方都可用。

我想知道 2 个哪个更有优势并且是更好的选择。我能想到的一个方面是,当我们想要检索 xml 文件中的值时,System.setProperty 非常有用[使用 ${key}]。使用公共(public)静态变量无法实现相同的效果。

我的问题是

  1. 还有其他好处吗?
  2. 哪一个是更好的选择?
  3. 什么情况下应该使用 System.setProperty/getProperty 和公共(public)静态变量?

提前致谢。

最佳答案

Setter 可以进行进一步的测试。例如针对 null 进行测试、针对错误值进行测试等...

Setter 通常是更好的选择,但是,没有 Setters 的类可能会更好,不要给用户破坏程序的方法

public static Variable variable;

//In other file
variable = null; 

公共(public)静态变量根本不是线程安全的!!!(也许如果它是原子的)

除非处理我确实想要进行大量更改的内容,例如 Vector2D/3D,否则我从不使用公共(public)静态(在这种情况下,无论如何它都不是公共(public)静态,因为它不是静态的)。除此之外,我这样做只是因为用户无法将 x、y、z 归零,因为它是 float/int。通常我会使用执行我想要的操作的方法,而不是简单的 Setter。

(例如:不是一个很好的例子,但我认为它说明了我的意思。使用 Person.eat() 代替 Person.setState(State.EATING))

关于java - System.setProperty 还是公共(public)静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38656345/

相关文章:

java - 在 Java 中如何检查文件中的空行然后忽略它们?

java - 如何通过函数调用启用 float 操作按钮?

javascript - 通常只执行一次 javascript 的有效方法(通过 cookie)?

带有 ref 参数的 c# 静态方法 - 一个好主意?

java - volatile 写入的成本

java - testNG 出现 noClassDefFound 错误

c++ - 是否为地址从未使用过的静态常量变量分配了内存?

swift - 在具有一堆静态单元格的 TableView 中设置所有标签的文本颜色

java - 调整 3 列通用组件的布局,其他组件位于上方/下方

c++ - 从派生类访问静态常量变量