2015-03-02 25 views
0

我希望能够在程序中调整点击间隔,如果用户希望这样做,那么类ClickAdjustmentFrame将被实例化。非实例化类中的静态变量是否会通过调用Toolkit来初始化?

在唯一可以更改其值的类中初始化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

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

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

+0

- 该链接非常好。谢谢。这确实是一个非常基本的问题,不是。很明显,现在我已经阅读了链接。 – DSlomer64 2015-03-02 23:07:11