通过调用Toolkit来初始化非实例化类中的静态变量吗?

时间:2015-03-02 22:36:45

标签: java static-members objectinstantiation

我希望能够在用户希望的情况下调整程序中的点击间隔,此时将实例化类ClickAdjustmentFrame

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

public class ClickAdjustmentFrame {

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

因为该类并不总是被实例化,所以该类现在从GUI类中导入CLICK_FREQUENCY的值,在那里我移动了有问题的语句。 (即,GUI现在开始像这样:)

public class GUI {

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

但在进行更改之前,在调试期间,即使Toolkit尚未实例化,也似乎正在调用ClickAdjustmentFrame。起初并不令人惊讶。然后我开始质疑设计,因此将调用移至Toolkit到GUI。

就我的应用而言,它不再重要,但是为了记录和教育目的,如果对Toolkit的调用是在其他任何地方进行的,那么CLICK_FREQUENCY的价值就会增加如果没有实例化类ClickAdjustmentFrame(如下所示),计算并可用于包的其余部分?

public class ClickAdjustmentFrame {

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

我知道我可以在非实例化的类中调用static方法(并经常这样做),但这是关于static 变量通过在其他地方调用static方法。

究竟什么是非常基本的原则适用于此?是否所有类的static成员都可用于包中的其他类?

也许更好的问题是:将Toolkit的调用移回ClickAdjustmentFrame更为明智(更好的设计),这是CLICK_FREQUENCY值唯一的类{{1}} 改变

1 个答案:

答案 0 :(得分:1)

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

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