如果用户希望的话,我希望能够调整程序中的点击间隔,此时类 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
到图形用户界面。
就我的应用程序而言,这不再重要,但出于记录和教育目的,如果调用 Toolkit
CLICK_FREQUENCY
的值(value)是在其他地方制造的吗?即使类 ClickAdjustmentFrame
也可以计算并可供包的其余部分使用(如下所示)没有实例化?
public class ClickAdjustmentFrame {
static int CLICK_FREQUENCY = ((Integer)Toolkit.getDefaultToolkit()
.getDesktopProperty("awt.multiClickInterval"));
...
我知道我可以调用 static
非实例化类中的方法(并且经常这样做),但这大约是 static
变量通过调用 static
进行初始化方法别处。
这里到底适用什么基本原则?难道这都是static
任何类的成员都可用于包中的其他类吗?
也许更好的问题是:将调用移至 Toolkit
是否更明智(更好的设计)?返回ClickAdjustmentFrame
,唯一一个值为 CLICK_FREQUENCY
的类可以改变吗?
最佳答案
静态字段在类加载器第一次加载类时初始化。请参阅this SO .
例如,如果访问类 ClickAdjustmentFrame
的静态字段,则没有实例,但会发生该类的所有静态初始化。
关于java - 非实例化类中的静态变量是否会通过调用 Toolkit 来初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28820765/