上一篇:初識反射機制 | 帶你學《Java語言高級特性》之八十
【本節目標】
本節需要學會掌握Class類對象的三種實例化模式的方法,在以後的開發過程中都會用到。
Class類對象的三種實例化模式
反射中所有的核心操作都是通過Class類對象展開的,可以說Class類是反射操作的根源所在,但是這個類如果要想獲取它的實例化對象可以採用三種方式來實現,首先來觀察java.lang.Class類的定義:
public final class Class<T> extends Object
implements Serializable, GenericDeclaration, Type, AnnotatedElement
從JDK1.5開始,Class類在定義的時可以使用泛型進行標記,這樣的用法主要是希望可以避免所謂的向下轉型。下面通過具體的操作講解三種實例化形式。
1、【Object類支持】Object類可以根據實例化對象獲取Class對象。
public final Class<?> getClass()
class Person{} //採用自定義的程序類
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
Person per = new Person(); //已經存在有指定類的實例化對象
Class<? extends Person> cls = per.getClass();
System.out.println(cls.getName()); //獲取的是類的完整名稱
}
}
這種方式有一個不是缺點的缺點:如果只是想獲得Class類對象,則必須產生指定類對象後才可以獲得。
2、【JVM直接支持】採用“類.class”的形式實例化
class Person{} //採用自定義的程序類
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
Class<? extends Person> cls=Person.class;
System.out.println(cls.getName()); //cn.mldn.demo.Person
}
}
特點:如果想獲得Class類對象,就必須導入程序所對應的開發包;
3、【Class類支持】在Class類中提供有一個static方法:
加載類:public static Class<?> forName(String className)throws ClassNotFoundException
package cn.mldn.vo;
public class Person {
}
package cn.mldn.demo;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
Class<?> cls = Class.forName("cn.mldn.vo.Person");//該類必須存在
System.out.println(cls.getName()); //cn.mldn.vo.Person
}
}
這種模式最大的特點:可以直接採用字符串的形式定義要使用的類型,並且程序中不需要編寫任何的import語句。
如果此時要使用的程序類不存在則會拋出“java.lang.ClassNotFoundException”異常。
想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本內容視頻來源於阿里雲大學