什么样的全局变量在java中是不好的做法?

时间:2013-08-11 06:10:23

标签: java global

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

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

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

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

4 个答案:

答案 0 :(得分:1)

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

所以你必须要处理你的数据,因为它是广为人知的。

如果你正在使用多线程,那么你就会遇到麻烦,因为任何人都可以修改这些数据,因此很多数据的范围都会被破坏。

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

  1. 尽可能保持变量visiblity最小,私密。
  2. 尽可能让它永不变化。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分: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;
    }
}

答案 3 :(得分:0)

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

查看此link

另一种方法是创建一个遵循singleton模式的类,因此只能有一个类的实例,并将变量保存在单例类中,并使用get和{ {1}}方法。

编辑1: -

在声明常量的情况下寻找旧样式。这样的事情: -

set

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