当我定义静态或常量成员时,例如:
public static final Font BIG_FONT = new Font("", Font.BOLD, 18);
我注意到它们只在我第一次使用它们时加载,这会在运行时导致冻结,或者迫使我以某种方式通过在程序启动时强制“使用”常量来预加载它们。
这些类型的静态成员是不是应该在程序启动时加载而不是等到第一次使用时加载?如何确保预装?
提前致谢。
答案 0 :(得分:2)
没有
首次加载类时会执行静态初始值设定项。
Java Runtime不会在启动程序时立即初始化每个类;这将是一个非常糟糕的主意。
答案 1 :(得分:2)
在Java中,静态函数在首次使用类时初始化,而不是在首次使用静态成员本身时初始化。您可以使用该类的任何其他成员强制“预加载”,而不一定是静态字段本身。
答案 2 :(得分:2)
你可以做的是创建一个静态加载器方法,并在初始化方法中包含它。
答案 3 :(得分:1)
正如其他人所说的那样,在首次加载类时会初始化静态。
强制执行此操作的一种方法是创建有问题的类的实例,或者创建(编程)包含静态的不同(新)类,并在程序启动时立即对其进行实例化。但是,我不确定我是否会建议练习,因为它们占用的内存可能会更好地用于其他地方。