您好,登錄后才能下訂單哦!
這篇文章主要講解了“java中Class類對象的實例化模式有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“java中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中Class類對象的實例化模式有哪些”的內容了,經過本文的學習后,相信大家對java中Class類對象的實例化模式有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。