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

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

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

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

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

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

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

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

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

所以你必须要处理你的数据,因为它是广泛可见的。

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

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

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

您可以自由使用公共静态常量或变量。 如果您使用非静态变量,那么良好的做法是使用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; } } 

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

看看这个链接 。

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

EDIT1: –

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

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

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