[英]java Dynamic class loading
使用方法forName()
加載類時,將執行該類中的所有靜態initializers
。 我可以預防嗎?
try {
Class.forName("MYClass");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我的課
class MyClass{
static String TEST="MYCLASS";
static SomeClass sm=new SomeClass();
}
我在文檔中發現Class.forName()的重載版本,即
public static Class<?> forName(String name,
boolean initialize,
ClassLoader loader)
throws ClassNotFoundException
什么是initialize
參數?
這就是Java創建對象的方式,所以沒有。 一種方法是在其他時間延遲加載實例。
這意味着您將必須刪除靜態引用。
例如
public SomeClass getSomeClass() {
if (sm == null) {
return new SomeClass();
}
return sm;
}
如果您不想執行靜態初始化,請嘗試使用類文字而不是Class.forName
class A1{
static{
System.out.println("static block from A1");
}
}
class B1{
public static void main(String[] args) throws ClassNotFoundException {
// Class.forName("A1");//this will invoke static initialization
Class c=A1.class;//this will not invoke static initialization
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.