可以使用java.lang.Class
:
public static Class<?> forName(String name, boolean initialize,
ClassLoader loader)
根据the JavaDoc,第二个参数用于控制类初始化的时间(执行静态初始化代码)。如果true
,则在加载后和执行此方法期间初始化类; if false
,初始化会延迟到第一次使用该类时。
现在,我理解了所有这些,但文档没有说明如何决定使用哪种策略。总是立即进行初始化更好吗?总是推迟首次使用会更好吗?这取决于具体情况吗?
答案 0 :(得分:5)
是的,这取决于具体情况,但通常最好只在第一次使用时加载和初始化类。
您可能希望尽早初始化它们的情况(例如,通过为forName()
调用它们):
HTTPUrlConnection
缓存System.getProperty("http.agent")
返回的HTTP用户代理。首次使用时,其值将被缓存,如果您更改它(使用类似System.setProperty()
),则不会使用新值。如果您提前初始化正确的类,可以强制执行此类缓存,以保护它们稍后由代码修改。不应该提前初始化的情况:
AboutDialog
),因为这是一种罕见的情况,在大多数运行中,用户不会这样做/需要这个。