0

如果用户希望这样做,我希望能够在程序中调整点击间隔,此时类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到 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可以更改值的类?

4

1 回答 1

1

类加载器第一次加载类时会初始化静态字段。看到这个 SO

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

于 2015-03-02T23:02:52.620 回答