非实例化 class 中的静态变量是否会通过调用 Toolkit 进行初始化?
Will static variable in non-instantiated class be initialized via call to Toolkit?
我希望能够在用户希望的情况下调整程序中的点击间隔,此时 class ClickAdjustmentFrame
将被实例化。
在唯一可以更改其值的 class 中初始化 CLICK_FREQUENCY
似乎是明智的。所以 class 是这样开始的:
public class ClickAdjustmentFrame {
static int CLICK_FREQUENCY = ((Integer)Toolkit.getDefaultToolkit()
.getDesktopProperty("awt.multiClickInterval"));
因为 class 并不总是实例化,所以 class 现在从 GUI class 导入 CLICK_FREQUENCY
的值,我在其中移动了相关语句. (即,GUI 现在是这样开始的:)
public class GUI {
static int CLICK_FREQUENCY = ((Integer)Toolkit.getDefaultToolkit()
.getDesktopProperty("awt.multiClickInterval"));
但在进行更改之前,在调试过程中,似乎正在调用 Toolkit
,即使 ClickAdjustmentFrame
尚未实例化。起初这并不奇怪。然后我开始质疑设计,因此将对 Toolkit
的调用移至 GUI。
这对我的应用程序而言不再重要,但出于记录和教育目的,如果对 Toolkit
的调用不是在其他任何地方进行的,那么 CLICK_FREQUENCY
的价值会是即使未实例化 class ClickAdjustmentFrame
(如下所示),已计算并可供包的其余部分使用?
public class ClickAdjustmentFrame {
static int CLICK_FREQUENCY = ((Integer)Toolkit.getDefaultToolkit()
.getDesktopProperty("awt.multiClickInterval"));
...
我知道我可以在非实例化 class 中调用 static
方法(并且经常这样做),但这是关于 static
variables 通过调用其他地方的 static
方法进行初始化。
究竟什么最基本的原则适用于此?任何 class 的所有 static
成员是否对包中的其他 class 可用?
也许更好的问题是:将对 Toolkit
的调用移回 ClickAdjustmentFrame
是否更明智(更好的设计),唯一的 class 其中 CLICK_FREQUENCY
可以改变?
静态字段在 class 第一次被 class 加载程序加载时初始化。参见 this SO。
例如,如果访问 class ClickAdjustmentFrame
的静态字段,则没有实例,但会发生 class 的所有静态初始化。
我希望能够在用户希望的情况下调整程序中的点击间隔,此时 class ClickAdjustmentFrame
将被实例化。
在唯一可以更改其值的 class 中初始化 CLICK_FREQUENCY
似乎是明智的。所以 class 是这样开始的:
public class ClickAdjustmentFrame {
static int CLICK_FREQUENCY = ((Integer)Toolkit.getDefaultToolkit()
.getDesktopProperty("awt.multiClickInterval"));
因为 class 并不总是实例化,所以 class 现在从 GUI class 导入 CLICK_FREQUENCY
的值,我在其中移动了相关语句. (即,GUI 现在是这样开始的:)
public class GUI {
static int CLICK_FREQUENCY = ((Integer)Toolkit.getDefaultToolkit()
.getDesktopProperty("awt.multiClickInterval"));
但在进行更改之前,在调试过程中,似乎正在调用 Toolkit
,即使 ClickAdjustmentFrame
尚未实例化。起初这并不奇怪。然后我开始质疑设计,因此将对 Toolkit
的调用移至 GUI。
这对我的应用程序而言不再重要,但出于记录和教育目的,如果对 Toolkit
的调用不是在其他任何地方进行的,那么 CLICK_FREQUENCY
的价值会是即使未实例化 class ClickAdjustmentFrame
(如下所示),已计算并可供包的其余部分使用?
public class ClickAdjustmentFrame {
static int CLICK_FREQUENCY = ((Integer)Toolkit.getDefaultToolkit()
.getDesktopProperty("awt.multiClickInterval"));
...
我知道我可以在非实例化 class 中调用 static
方法(并且经常这样做),但这是关于 static
variables 通过调用其他地方的 static
方法进行初始化。
究竟什么最基本的原则适用于此?任何 class 的所有 static
成员是否对包中的其他 class 可用?
也许更好的问题是:将对 Toolkit
的调用移回 ClickAdjustmentFrame
是否更明智(更好的设计),唯一的 class 其中 CLICK_FREQUENCY
可以改变?
静态字段在 class 第一次被 class 加载程序加载时初始化。参见 this SO。
例如,如果访问 class ClickAdjustmentFrame
的静态字段,则没有实例,但会发生 class 的所有静态初始化。