轉自:
http://www.java265.com/JavaCourse/202205/3351.html
下文筆者講述Class.forName()方法的功能簡介說明,如下所示:
class物件簡介說明
class物件用于表示類
每一個類在JVM中都對應一個class物件
jvm中將使用class物件加入到類加載器中
注意事項:
1.java程式運行之前,并不會將所有的Class物件放入jvm中
2.每一個****.class類在jvm中只會對應一個Class實體物件
3.Class類只有一個私有建構式,并且Class物件只能由JVM創建和加載
4.Class類物件功能:運行時提供和獲取某個物件的型別資訊
獲得class物件的三種方法
1.呼叫Object類的getClass()方法來得到Class物件
如:
ObjectTest t;
Class c1 = t.getClass();
2、使用Class類的中靜態forName()方法獲得與字串相應的Class物件
如:
Class c2=Class.forName("ObjectTest")
ObjectTest:須是介面或類的名字
class.forname()語法:
Class c=Class.forName("類的全限定名")
3、直接使用類名的class
如:
Class c3 = User.class;
Class c4 = int.class;
Class c5 = Double[].class;
class的功能和方法
getname():
以string型別回傳class物件表示的物體(類,介面,陣列,基本型別,void等)名稱
newInstance():
創建一個實體,只能呼叫默認構造器
getsuperclass():
回傳class表示的物體超類的名稱
getClassLoader():
回傳該類的類加載器
getSimpleName():
不辦含包名的類名
isInterfence:
class物件是否表示某個介面
Class.forName()用法
Class.forName(xxx.xx.xx):
回傳的是一個類
Class.forName(xxx.xx.xx)的功能:
JVM查找并加載指定的類,也就是說JVM會執行該類的靜態代碼段
Class.forName是一個靜態方法,相同能夠用來載入類
Class.forName語法:
Class.forName(String name, boolean initialize, ClassLoader loader)
或
Class.forName(String className)
name:類的全名,initialize:是否初始化類,loader:載入時使用的類載入器
另外一種形式則相當于設定了參數 initialize的值為 true,loader的值為當前類的類載入器
Class.forName()應用場景簡介
A a = (A)Class.forName(“pacage.A”).newInstance(); 效果等同于 A a = new A();
newInstance和new關鍵字的區別
Java中工廠模式常使用newInstance()方法來創建物件
如
class c = Class.forName(“Example”);
factory = (ExampleInterface)c.newInstance();
其中ExampleInterface是Example的介面,也寫成如下形式:
String className = “Example”;
class c = Class.forName(className);
factory = (ExampleInterface)c.newInstance();
----或------
String className = readfromXMlConfig;//從xml 組態檔中獲得字串
class c = Class.forName(className);
factory = (ExampleInterface)c.newInstance();
注意事項:
1.使用newInstance()方法時,這個類已經加載連接
而使用new關鍵字時,這個類可以沒有被加載
2.newInstance: 弱型別,低效率,只能呼叫無參構造,
new: 強型別,相對高效,能呼叫任何public構造,
3.Class.forName(“”)回傳的是類,
Class.forName(“”).newInstance()回傳的是object
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/499408.html
標籤:Java
上一篇:Tomcat介紹和配置使用
下一篇:java例外處理
