一棵帽、反射
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類的作用是運行時提供或獲得某個對象的類型信息,和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)換為字符串。