反射

一、反射

Class類也是類的一種,只是名字和class關(guān)鍵字高度相似。Java是大小寫敏感的語言。
Class類的對象內(nèi)容是你創(chuàng)建的類的類型信息,比如你創(chuàng)建一個shapes類,那么,Java會生成一個內(nèi)容是shapes的Class類的對象
Class類的對象不能像普通類一樣,以 new shapes() 的方式創(chuàng)建,它的對象只能由JVM創(chuàng)建,因為這個類沒有public構(gòu)造函數(shù)
Class類的作用是運(yùn)行時提供或獲得某個對象的類型信息,和C++中的typeid()函數(shù)類似。這些信息也可用于反射。

1.Class類原理

我們都知道所有的java類都是繼承了object這個類,在object這個類中有一個方法:getclass().這個方法是用來取得該類已經(jīng)被實例化了的對象的該類的引用,這個引用指向的是Class類的對象。我們自己無法生成一個Class對象(構(gòu)造函數(shù)為private),而 這個Class類的對象是在當(dāng)各類被調(diào)入時,由 Java 虛擬機(jī)自動創(chuàng)建 Class 對象,或通過類裝載器中的 defineClass 方法生成。我們生成的對象都會有個字段記錄該對象所屬類在CLass類的對象的所在位置。如下圖所示:

2.活的一個Class 對象

  • Class clazz = Class.forName('className');

  • public class shapes{}
    shapes s1=new shapes();
    Class obj=s1.getClass();
    Class obj1=s1.getSuperclass();//這個函數(shù)作用是獲取shapes類的父類的類型

  • Class<shapes> obj=shapes.class;
    shapes newShape=obj.newInstance();

》》基本方法
getClassLoader()
獲取該類的類裝載器。
getComponentType()
如果當(dāng)前類表示一個數(shù)組,則返回表示該數(shù)組組件的 Class 對象,否則返回 null。
getConstructor(Class[])
返回當(dāng)前 Class 對象表示的類的指定的公有構(gòu)造子對象。
getConstructors()
返回當(dāng)前 Class 對象表示的類的所有公有構(gòu)造子對象數(shù)組。
getDeclaredConstructor(Class[])
返回當(dāng)前 Class 對象表示的類的指定已說明的一個構(gòu)造子對象。
getDeclaredConstructors()
返回當(dāng)前 Class 對象表示的類的所有已說明的構(gòu)造子對象數(shù)組。
getDeclaredField(String)
返回當(dāng)前 Class 對象表示的類或接口的指定已說明的一個域?qū)ο蟆?br> getDeclaredFields()
返回當(dāng)前 Class 對象表示的類或接口的所有已說明的域?qū)ο髷?shù)組。
getDeclaredMethod(String, Class[])
返回當(dāng)前 Class 對象表示的類或接口的指定已說明的一個方法對象。
getDeclaredMethods()
返回 Class 對象表示的類或接口的所有已說明的方法數(shù)組。
獲取的是類自身聲明的所有方法,包含public、protected和private方法。
getField(String)
返回當(dāng)前 Class 對象表示的類或接口的指定的公有成員域?qū)ο蟆?br> getFields()
返回當(dāng)前 Class 對象表示的類或接口的所有可訪問的公有域?qū)ο髷?shù)組。
getInterfaces()
返回當(dāng)前對象表示的類或接口實現(xiàn)的接口。
getMethod(String, Class[])
返回當(dāng)前 Class 對象表示的類或接口的指定的公有成員方法對象。
獲取的是類的所有共有方法,這就包括自身的所有public方法,和從基類繼承的、從接口實現(xiàn)的所有public方法。
getMethods()
返回當(dāng)前 Class 對象表示的類或接口的所有公有成員方法對象數(shù)組,包括已聲明的和從父類繼承的方法。
getModifiers()
返回該類或接口的 Java 語言修改器代碼。
getName()
返回 Class 對象表示的類型(類、接口、數(shù)組或基類型)的完整路徑名字符串。
getResource(String)
按指定名查找資源。
getResourceAsStream(String)
用給定名查找資源。
getSigners()
獲取類標(biāo)記。
getSuperclass()
如果此對象表示除 Object 外的任一類, 那么返回此對象的父類對象。
isArray()
如果 Class 對象表示一個數(shù)組則返回 true, 否則返回 false。
isAssignableFrom(Class)
判定 Class 對象表示的類或接口是否同參數(shù)指定的 Class 表示的類或接口相同,或是其父類。
isInstance(Object)
此方法是 Java 語言 instanceof 操作的動態(tài)等價方法。
isInterface()
判定指定的 Class 對象是否表示一個接口類型。
isPrimitive()
判定指定的 Class 對象是否表示一個 Java 的基類型。
newInstance()
創(chuàng)建類的新實例。
toString()
將對象轉(zhuǎn)換為字符串。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容