【JAVA】反射總結

反射是什麼?

反射就是指程序在運行的時候能夠知道一個類的自身信息。編程

自身信息有哪些:類方法、屬性、成員變量、構造方法、包等框架

動態編譯和靜態編譯 

靜態編譯:在編譯的時候進肯定類型,若是綁定對象成功,new 是靜態加載類,就編譯經過。函數

ClassA classA = new ClassA();

動態編譯:在運行的時候肯定類型,綁定對象。最大發揮了Java的多態,下降類之間的耦合性。spa

Class c = Class.forName("ClassA");
ClassA classA = (ClassA) c.newInstance();

相關方法

public Method getDeclaredMethod(String name, Class<?>... parameterTypes) // 獲得該類全部的方法,不包括父類的
public Method getMethod(String name, Class<?>... parameterTypes) // 獲得該類全部的public方法,包括父類的
//具體使用
Method[] methods = class1.getDeclaredMethods();//獲取class對象的全部聲明方法
Method[] allMethods = class1.getMethods();//獲取class對象的全部public方法 包括父類的方法
Method method = class1.getMethod("info", String.class);//返回次Class對象對應類的、帶指定形參列表的public方法
Method declaredMethod = class1.getDeclaredMethod("info", String.class);//返回次Class對象對應類的、帶指定形參列表的方法
public Field getDeclaredField(String name) // 得到該類自身聲明的全部變量,不包括其父類的變量
public Field getField(String name) // 得到該類自全部的public成員變量,包括其父類變量

//具體實現
Field[] allFields = class1.getDeclaredFields();//獲取class對象的全部屬性
Field[] publicFields = class1.getFields();//獲取class對象的public屬性
Field ageField = class1.getDeclaredField("age");//獲取class指定屬性
Field desField = class1.getField("des");//獲取class指定的public屬性

public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) // 得到該類全部的構造器,不包括其父類的構造器
public Constructor<T> getConstructor(Class<?>... parameterTypes) // 得到該類因此public構造器,包括父類

//具體
Constructor<?>[] allConstructors = class1.getDeclaredConstructors();//獲取class對象的全部聲明構造函數
Constructor<?>[] publicConstructors = class1.getConstructors();//獲取class對象public構造函數
Constructor<?> constructor = class1.getDeclaredConstructor(String.class);//獲取指定聲明構造函數
Constructor publicConstructor = class1.getConstructor(String.class);//獲取指定聲明的public構造函數

理解了反射以後,AOP(面向切面編程)就很簡單代理

反射用的地方不少,如今全部的框架裏面幾乎處處是反射code

動態代理分幾種方式:

1. 靜態代理,直接寫一個新類對實現類進行包裝;對象

2. 動態代理,經過反射取得類實現,並調用方法,實現類必須實現其接口;blog

3. CGLib代理,不須要實現接口,能夠對任意類進行實現;接口

參考:get

https://mp.weixin.qq.com/s?__biz=MjM5NzMyMjAwMA==&mid=2651478782&idx=1&sn=f468a2d9129d313f5ed15e30604f7199&chksm=bd2536818a52bf9710623f843c75cb751ba7d5fd3a56a3aa3ceffebccfdbc02e29e8ed9d7130&scene=21#wechat_redirect

相關文章
相關標籤/搜索