2015-03-02 27 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