簡體   English   中英

java動態類加載

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM