我希望能够在用户希望的情况下调整程序中的点击间隔,此时将实例化类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}} 改变
答案 0 :(得分:1)
静态字段在类加载器第一次加载类时初始化。请参阅this SO。
例如,如果访问类ClickAdjustmentFrame
的静态字段,则没有实例,但将发生该类的所有静态初始化。