定義
JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意的一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法抵恋;對(duì)于任意的一個(gè)類,都能夠調(diào)用這個(gè)類的任意方法和屬性宝磨;這種動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用對(duì)象方法的功能稱為java語(yǔ)言的反射機(jī)制弧关;
用途
在日常的第三方應(yīng)用開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)遇到某個(gè)類的某個(gè)成員變量唤锉、方法世囊、構(gòu)造方法是私有的或是只對(duì)系統(tǒng)內(nèi)開(kāi)放,這時(shí)就可以利用java的反射機(jī)制通過(guò)反射來(lái)獲取所需的私有方法和屬性窿祥;但是也不是所有的的都適合反射株憾,對(duì)于沒(méi)有權(quán)限的應(yīng)用返回值是沒(méi)有任何意義的缺省值;
反射機(jī)制的相關(guān)類
- class類:代表類的實(shí)體晒衩,在運(yùn)行的java應(yīng)用程序中表示類和接口嗤瞎;
- field類:代表類的成員變量(成員變量也稱為類的屬性)
- method類:代表類的方法;
- constructor類:代表類的構(gòu)造方法听系;
class類
獲得類相關(guān)的方法
- asSubclass(Class<U> clazz)把傳遞的類的對(duì)象轉(zhuǎn)換成代表其子類的對(duì)象贝奇;
- cast 把對(duì)象轉(zhuǎn)換成代表類或是接口的對(duì)象;
- getClassLoader() 獲得類的加載器跛锌;
- getClasses() 返回一個(gè)數(shù)組弃秆,數(shù)組中包含該類中所有公共類和接口類的對(duì)象;
- getDeclaredClasses() 返回一個(gè)數(shù)組髓帽,數(shù)組中包含該類中的所有類和接口類的對(duì)象菠赚;
- forName(String className) 根據(jù)類名返回類的對(duì)象;
- getName() 獲得類的完整路徑名字郑藏;
- newInstance() 創(chuàng)建類的實(shí)例衡查;
- getPackage()獲得類的包;
- getSimpleName() 獲得類的名字必盖;
- getSuperclass() 獲得當(dāng)前類繼承的父類的名字拌牲;
- getInterfaces() 獲得當(dāng)前類實(shí)現(xiàn)的類或是接口俱饿;
獲得類中屬性相關(guān)的方法
- getField(String name) 獲得某個(gè)共有的屬性對(duì)象;
- getFields() 獲得所有共有的屬性對(duì)象塌忽;
- getDeclaredField(String name) 獲得某個(gè)屬性對(duì)象拍埠;
- getDeclaredFields() 獲得所有屬性對(duì)象;
獲得類中注解相關(guān)的方法土居;
- getAnnotation(Class<U> annotationClass) 返回該類中與參數(shù)類型相匹配的共有注解對(duì)象枣购;
- getAnnotations() 返回該類中所有的共有注解對(duì)象;
- getDeclaredAnnotation(Class<U> annotationClass) 返回該類中于參數(shù)類型匹配的注解對(duì)象擦耀;
- getDeclaredAnnotations() 返回該類中所有的注解對(duì)象棉圈;
獲得類中構(gòu)造器相關(guān)的方法;
- getConstructor(Class..<?> parameterTypes)獲得該類中與參數(shù)類型匹配的共有構(gòu)造方法眷蜓;
- getConstructors() 獲得該類的所有共有構(gòu)造方法分瘾;
- getDeclaredContructor(Class..<?> parameterTypes) 獲得該類中與參數(shù)類型匹配的構(gòu)造方法;
- getDeclaredConstructor()獲得該類中所有構(gòu)造方法吁系;
獲得類中方法的相關(guān)方法德召;
- getMethod(String name,Class..<U> parameterTypes) 獲得該類中的某個(gè)共有方法;
- getMethods() 獲得該類中的所有共用方法垮抗;
- getDeclaredMethod(String name,Class..<U> parameterTypes) 獲得該類中的某個(gè)方法氏捞;
- getDeclaredMethods() 獲得該類中的所有方法;
類中其他的重要方法冒版;
- isAnnotation()如果是注解類型則返回true;
- isAnnotationPresent(Class<? extends Annotation> annotationClass)如果是指定類型的注解則返回true逞姿;
- isAnonymousClass() 如果是匿名內(nèi)部類則返回true辞嗡;
- isArray() 如果是一個(gè)數(shù)組類型則放回true;
- isEnum()如果是枚舉類型則返回true滞造;
- isInstance(Object obj)如果是obj是當(dāng)前類的實(shí)例則返回true续室;
- isInterface()如果當(dāng)前類是接口類型則返回true;
- isLocalClass()如果是局部類則返回true谒养;
- isMemberClass() 如果是內(nèi)部類則返回true挺狰;
filed類
- equals(Object obj)屬性和obj相等則返回true;
- get(Object obj)獲取obj中對(duì)應(yīng)的屬性值买窟;
- set(Object obj丰泊,Object value)設(shè)置obj中對(duì)應(yīng)屬性的值
Method 類
- invoke(Object obj,Object... args)傳遞object對(duì)象及參數(shù)調(diào)用該對(duì)象的方法始绍;
constructor類
- newInstance(Object initargs) 根據(jù)傳遞的參數(shù)創(chuàng)建類的對(duì)象瞳购;