一.什么是反射
Java 中的反射是一種強大的工具,它能夠創建靈活的代碼 ,這些代碼可以在運行時裝配 ,無須在組件之間進行鏈接 ,反射允許在撰寫與執行時,使程式代碼能夠接入裝載到JVM中的類的內部資訊,而不是源代碼中選定的類協作的代碼,這使反射成為構建靈活應用的主要工具,需注意的是,如果使用不當,反射的成本會很高, Java中的類反射Reflection是Java程式開發語言的特征之一 ,它允許運行中的Java程式對自身進行檢查,或者說"自審 ",并能直接操作程式的內部屬性 ,Java的這一能力在實際應用中也許用得不是很多,但是在其他的程式設計語言中根本就不存在這一特性,例如,Pascal、C或者C++中就沒有辦法在程式中獲得與函式定義相關的資訊,
二.反射的優點和缺點
優點
對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個物件,都能夠呼叫它的任意一個方法 ,增加程式的靈活性和擴展性,降低耦合性,提高自適應能力 ,反射已經運用在了很多流行框架如:Struts、Hibernate、Spring 等等 ,
缺點
使用反射會有效率問題,會導致程式效率降低,具體參考這里 :http://www.imooc.com/article/293679反射技術繞過了源代碼的技術,因而會帶來維護問題,反射代碼比相應的直接代碼更復雜 ,
三.反射相關的類
類名 用途 Class類 代表類的物體,在運行的Java應用程式中表示類的介面 Field類 代表類的成員變數/類的屬性 Method類 代表類的方法 Constructor類 代表類的構造方法
四.Class類中相關方法
1.常用獲取類相關方法
方法 用途 getClassLoader () 獲得類的加載器 getDeclaredClasses() 回傳一個陣列,陣列中包含該類中所有類和介面類的物件(包括私有的) forName() 根據類名回傳類的物件 newInstance () 創建類的實體 getName() 獲得類的完整路徑名字
2.常用獲得類中屬性相關的方法(以下方法回傳值為Field相關)
方法 用途 getField(String name) 獲得某個公有的屬性物件 getFields() 獲得某個所有的屬性物件 getDeclaredField(String name) 獲得某個屬性物件 getDeclaredFields() 獲得所有屬性物件
3.(了解)獲得類中注解相關的方法
方法 用途 getAnnotation(Class annotation Class) 回傳該類中與引數型別匹配的公有注解物件 getAnnotations() getAnnotations() 返 getDeclaredAnnotation(Class annotation Class) 回傳該類中與引數型別匹配的所有注解物件 getDeclaredAnnotations() 回傳該類所有的注解物件
4.(重要)獲得類中構造器相關的方法(以下方法回傳值為Constructor相關)
方法 用途 getConstructor(Class…<?> parameterTypes) 獲得該類中與引數型別匹配的公有構造方法 getConstructors() getConstructors() 獲得該類的所有公有構造方法 getDeclaredConstructor(Class…<?> parameterTypes) 獲得該類中與引數型別匹配的構造方法 getDeclaredConstructors() 獲得該類所有構造方法
5.(重要)獲得類中方法相關的方法
方法 用途 getMethod(String name, Class…<?> parameterTypes) getMethod(String name, Class…<?> parameterTypes) 獲得該類某個公有的方法 getMethods() getMethods() 獲得該類所有公有的方法 getDeclaredMethod(String name, Class…<?> parameterTypes) 獲得該類某個方法 getDeclaredMethods() getDeclaredMethods() 獲得該類所有方法
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/251832.html
標籤:區塊鏈
上一篇:VM 安裝VM tools實作VM和Windows之間可以互相復制粘貼
下一篇:以太坊2.0系列 - 分片鏈與信標鏈