Class.forName() 官方文檔解釋:通俗點說就是要求JVM查找並加載指定的類,也就是說JVM會執行該類的靜態代碼段,並返回與該類相關的Class對象。
例如:加載thread類(只是先加載、初始化,並沒有實例化\new\分配內存空間)
Class t = Class.forName(“java.lang.Thread”);
另外需要理解的概念:
♦靜態代碼塊:
概念總結:隨着類的加載而加載,並且只執行一次,常用來執行類的初始化
作用:用於給類初始化
♦區分 new關鍵字和newInstance() 、Class.forName()的區別:
new():實例化並分配內存空間。使用關鍵字new創建一個類的時候,這個類可以沒有被加載。
newInstance():實例化並分配內存空間,但是前提要求 這個類已經加載。
Class.forName():要求JVM查找並加載指定的類,也就是說JVM會執行該類的靜態代碼段,並返回與該類相關的Class對象。
現在可以看出,newInstance()實際上是把new這個方式分解為兩步,即首先調用Class加載方法加載某個類,然后實例化。
Class t = Class.forName(str);
t.newInstance();
這樣分步的好處是顯而易見的。我們可以在調用class的靜態加載方法forName時獲得更好的靈活性,提供給了一種降耦的手段。