6

对于我的许多 java 项目,我广泛使用数据库,我通常做的是有一个property.xml文件来保存我所有的字符串和设置。

然后我会有一个类CNST来保存与 xml 文件中的静态常量相对应的所有静态常量。

这些常量在程序启动时由 xml 文件初始化一次,并在以后的程序中用作全局变量。

然而,在这几天阅读了很多文章之后,似乎使用全局变量根本不是一个好习惯。那么请任何人都可以指出这种情况的良好做法吗?谢谢。

4

4 回答 4

3

使用全局变量意味着它们对许多可以操作数据的类可见。

因此,如果数据广泛可见,您将不得不处理好您的数据。

而且,如果您使用多线程,那么您将遇到麻烦,因为任何人都可以修改该数据,因此数据损坏的范围很大。

作为实践,我遵循以下几点:

  1. 如果可能的话,保持变量可见性最小,私有。
  2. 尽可能使其不可变。
于 2013-08-11T06:26:07.377 回答
3

一般来说,如果可能的话,应该避免使用全局变量=>但是,如果它们是常量,这不是问题。对于这种情况,当您(可能)在开始时初始化此全局设置包装器对象并且之后没有任何更改时,有以下选项:

  • 具有在块 public static final中初始化的常量 ( )static
  • private static final在块中初始化变量static并通过 getter 公开
  • 创建一个单例并private final通过 getter 公开变量

与第 1 点相比,第 2 点和第 3 点的优势在于,在 getter 方法中,您已经封装了变量的值,并且可以更改/插入操作要返回给调用方法的值的代码,而不会影响依赖于它的(调用)代码。

于 2013-08-11T07:18:57.437 回答
0

您可以自由使用公共静态常量或变量。如果您使用非静态变量,那么好的做法是使用 Getters 和 Setters。如果您的类仅包含静态常量,那么您还可以使用私有构造函数来限制创建此类的实例。

public class Global {

    public static final int A;
    public static final int B;

    private Global() {} // use only when you have only static fields and methods

    static {
        A = 1;
        B = 2;
    }
}
于 2013-08-11T06:13:57.447 回答
0

您可以创建一个public static变量而不是全局变量,这将是一个更好的主意。

看看这个链接

另一种方法是创建一个遵循该singleton模式的类,因此该类只能有一个实例,并将变量保留在单例类中,并使用getset方法访问它。

编辑1: -

在声明常量的情况下使用旧样式。像这样的东西: -

(public/private) static final TYPE NAME = VALUE;

在这种情况下,我不建议创建一个类。

于 2013-08-11T06:14:05.440 回答