java - 非实例化类中的静态变量是否会通过调用 Toolkit 来初始化?

标签 java static-members objectinstantiation

如果用户希望的话,我希望能够调整程序中的点击间隔,此时类 ClickAdjustmentFrame将被实例化。

拥有 CLICK_FREQUENCY 似乎是明智的在唯一可以更改其值的类中初始化。所以这个类是这样开始的:

public class ClickAdjustmentFrame {

    static int CLICK_FREQUENCY = ((Integer)Toolkit.getDefaultToolkit()
      .getDesktopProperty("awt.multiClickInterval"));

由于该类并不总是实例化,因此该类现在导入 CLICK_FREQUENCY 的值来自 GUI 类,我在其中移动了有问题的语句。 (即,GUI 现在是这样开始的:)

public class GUI {

   static int CLICK_FREQUENCY = ((Integer)Toolkit.getDefaultToolkit()
          .getDesktopProperty("awt.multiClickInterval"));

但是在进行更改之前,在调试过程中,似乎调用了 Toolkit即使ClickAdjustmentFrame正在制作还没有被实例化。起初这并不奇怪。然后我开始质疑设计,因此将调用转移到 Toolkit到图形用户界面。

就我的应用程序而言,这不再重要,但出于记录和教育目的,如果调用 Toolkit CLICK_FREQUENCY 的值(value)是在其他地方制造的吗?即使类 ClickAdjustmentFrame 也可以计算并可供包的其余部分使用(如下所示)没有实例化?

public class ClickAdjustmentFrame {

    static int CLICK_FREQUENCY = ((Integer)Toolkit.getDefaultToolkit()
      .getDesktopProperty("awt.multiClickInterval"));
...

我知道我可以调用 static非实例化类中的方法(并且经常这样做),但这大约是 static 变量通过调用 static 进行初始化方法别处。

这里到底适用什么基本原则?难道这都是static任何类的成员都可用于包中的其他类吗?

也许更好的问题是:将调用移至 Toolkit 是否更明智(更好的设计)?返回ClickAdjustmentFrame ,唯一一个值为 CLICK_FREQUENCY 的类可以改变吗?

最佳答案

静态字段在类加载器第一次加载类时初始化。请参阅this SO .

例如,如果访问类 ClickAdjustmentFrame 的静态字段,则没有实例,但会发生该类的所有静态初始化。

关于java - 非实例化类中的静态变量是否会通过调用 Toolkit 来初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28820765/

相关文章:

c++ - 在里面。静态成员,而 COPY CTOR 是私有(private)的

C++ 实例化 "Implicit"类对象

Java - 创建以字符串为名称的类的实例

java - 找不到 log4j siftAppender 输出日志

java - Servlets 从没有 enctype ="multipart/form-data"的表单上传文件

javascript - 如何访问实例上的静态成员?

asp.net - 如何防止静态成员变量在 IIS 中一次被多个请求访问?

java - Spring 3 @PathVariable 验证

unity3d - 使用碰撞在生成后销毁预制对象

c# - Type.GetType 不区分大小写 - WinRT