Java反射機制詳解 及 Method.invoke解釋
JAVA反射機制
JAVA反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個方法;這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為java語言的反射機制。
Java反射機制主要提供了以下功能: 在執行時判斷任意一個物件所屬的類;在執行時構造任意一個類的物件;在執行時判斷任意一個類所具有的成員變數和方法;在執行時呼叫任意一個物件的方法;生成動態代理。
1. 得到某個物件的屬性
-
public Object getProperty(Object owner, String fieldName) throws
- Class ownerClass = owner.getClass();
- Field field = ownerClass.getField(fieldName);
- Object property = field.get(owner);
- return property;
- }
Class ownerClass = owner.getClass():得到該物件的Class。
Field field = ownerClass.getField(fieldName):通過Class得到類宣告的屬性。
Object property = field.get(owner):通過物件得到該屬性的例項,如果這個屬性是非公有的,這裡會報IllegalAccessException。
2. 得到某個類的靜態屬性
- public Object getStaticProperty(String className, String fieldName)
- throws Exception {
- Class ownerClass = Class.forName(className);
- Field field = ownerClass.getField(fieldName);
- Object property = field.get(ownerClass);
- return property;
- }
Class ownerClass = Class.forName(className) :首先得到這個類的Class。
Field field = ownerClass.getField(fieldName):和上面一樣,通過Class得到類宣告的屬性。
Object property = field.get(ownerClass) :這裡和上面有些不同,因為該屬性是靜態的,所以直接從類的Class裡取。
3. 執行某物件的方法
- public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception {
- Class ownerClass = owner.getClass();
- Class[] argsClass = new Class[args.length];
- for (int i = 0, j = args.length; i < j; i++) {
- argsClass[i] = args[i].getClass();
- }
- Method method = ownerClass.getMethod(methodName,argsClass);
- return method.invoke(owner, args);
- }
Class owner_class = owner.getClass() :首先還是必須得到這個物件的Class。
5~9行:配置引數的Class陣列,作為尋找Method的條件。
Method method = ownerClass.getMethod(methodName, argsClass):通過methodName和引數的argsClass(方法中的引數型別集合)陣列得到要執行的Method。
method.invoke(owner, args):執行該Method.invoke方法的引數是執行這個方法的物件owner,和引數陣列args,可以這麼理解:owner物件中帶有引數args的method方法。返回值是Object,也既是該方法的返回值。
4. 執行某個類的靜態方法
- public Object invokeStaticMethod(String className, String methodName,
- Object[] args) throws Exception {
- Class ownerClass = Class.forName(className);
- Class[] argsClass = new Class[args.length];
- for (int i = 0, j = args.length; i < j; i++) {
- argsClass[i] = args[i].getClass();
- }
- Method method = ownerClass.getMethod(methodName,argsClass);
- return method.invoke(null, args);
- }
基本的原理和例項3相同,不同點是最後一行,invoke的一個引數是null,因為這是靜態方法,不需要藉助例項執行。
5. 新建例項
- public Object newInstance(String className, Object[] args) throws Exception {
- Class newoneClass = Class.forName(className);
- Class[] argsClass = new Class[args.length];
- for (int i = 0, j = args.length; i < j; i++) {
- argsClass[i] = args[i].getClass();
- }
- Constructor cons = newoneClass.getConstructor(argsClass);
- return cons.newInstance(args);
- }
這裡說的方法是執行帶引數的建構函式來新建例項的方法。如果不需要引數,可以直接使用newoneClass.newInstance()來實現。
Class newoneClass = Class.forName(className):第一步,得到要構造的例項的Class。
第5~第9行:得到引數的Class陣列。
Constructor cons = newoneClass.getConstructor(argsClass):得到構造子。
cons.newInstance(args):新建例項。
6. 判斷是否為某個類的例項
- public boolean isInstance(Object obj, Class cls) {
- return cls.isInstance(obj);
- }
7. 得到陣列中的某個元素
- public Object getByArray(Object array, int index) {
- return Array.get(array,index);
- }
相關推薦
Java反射機制詳解 及 Method.invoke解釋
JAVA反射機制 JAVA反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個方法;這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為java語言的反射機制。 Java反射機制主要提供了以下功能: 在執行時判
Java反射機制詳解 及 Method.invoke 解釋
Java反射機制 Java反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個方法;這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為:Java語言的反射機制。 Java反射機制主要提供以下幾個功能:
Java反射機制詳解 及 Method.invoke解釋1
自:https://blog.csdn.net/mr_tim/article/details/51594717 JAVA反射機制 JAVA反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性
Java 反射機制詳解 及 Method.invoke解釋
JAVA反射機制 JAVA反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個方法;這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為java語言的反射機制。 Java反射機制主要提供了以下功能: 在執行時判斷任
Java反射機制詳解一
java 反射 反射機制 工廠模式 1反射機制是什麽反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。在面向對象的世界裏,萬事萬物皆對象.在ja
Java反射機制詳解
ride length 數組大小 conf array arraycopy 動態調用 ray info Java反射機制詳解 |目錄 1反射機制是什麽 2反射機制能做什麽 3反射機制的相關API ·通過一個對象獲得完整的包名和類名 ·實例化Class類對象 ·獲
Java反射機制詳解(由淺入深)
一、什麼是Java反射機制? Java 反射機制在程式執行時,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個方法和屬性。這種 動態的獲取資訊 以及 動態呼叫物件的方法 的功能稱為 java 的反
Java 反射機制詳解(一)
Java 反射機制詳解(一) 主要介紹以下幾方面內容 理解 Class 類 理解 Java 的類載入機制 學會使用 ClassLoader 進行類載入 理解反射的機制 掌握 Constructor、Method、Field 類的用法 理解並掌握動態代理&n
Java 反射機制詳解(四)
Java 反射機制詳解(四) 4. 反射與泛型 定義一個泛型類: public class DAO<T> { //根據id獲取一個物件 T get(Integer id){ return null; }
java反射機制詳解(二)
主要介紹以下幾方面內容 理解 Class 類 理解 Java 的類載入機制 學會使用 ClassLoader 進行類載入 理解反射的機制 掌握 Constructor、Method、Field 類的用法 理解並掌握動態代理 1.理解Class類
java反射機制詳解和應用
1反射機制是什麼 反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個方法和屬性;這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為java語言的反射機制。 2反射機制能做什麼 反射機制主要提供了以下功能: 在執行
Java的反射機制詳解(一)
pbc spa 詳解 uno face target lan tor cin 8n72q傅釁8戰sig叢http://www.docin.com/app/user/userinfo?userid=179185461 8u炊3F7LB椒1http://huiyi.docin.
Java中反射機制詳解
turn face instance java struct () 分享 2.6 一個 序言 在學習java基礎時,由於學的不紮實,講的實用性不強,就覺得沒用,很多重要的知識就那樣一筆帶過了,像這個馬上要講的反射機制一樣,當時學的時候就忽略了,到後來學習
Android總結篇——Intent機制詳解及示例總結
ets mp3 pro domain 一般來說 ssa star wrap 無線 一.Intent介紹: Intent的中文意思是“意圖,意向”,在Android中提供了Intent機制來協助應用間的交互與通訊,Intent負責對應用中一次操作的動 作、動作涉及
Python反射機制詳解
一、前言 def f1(): print('f1') def f2(): print('f2') def f3(): print('f3') def f4(): print('f4') a = 1
Android非同步訊息處理機制詳解及原始碼分析
PS一句:最終還是選擇CSDN來整理髮表這幾年的知識點,該文章平行遷移到CSDN。因為CSDN也支援MarkDown語法了,牛逼啊! 【工匠若水 http://blog.csdn.net/yanbober 轉載煩請註明出處,尊重分享成果】 最近相對來說比較閒,加上養病,所
java代理機制詳解(動態代理原理解析,簡單易懂!)
一.代理機制概念 1.代理機制是一種設計模式,分為靜態代理 與動態代理. 2.特徵:代理類與委託類有同樣的介面,代理類主要負責為委託類預處理訊息、過濾訊息、把訊息轉發給委託類,以及事後處理訊息等。 代理類的物件本身並不真正實現服務,而是通過呼叫委託類的物件的相關方法,來提供特
Java反射機制的原理及在Android下的簡單應用
package crazypebble.reflectiontest;import java.lang.reflect.Constructor;import java.lang.reflect.Method;publicclass LoadMethod { /** * 在執行時載入指定的類,並呼
Java GC機制詳解
垃圾收集 Garbage Collection 通常被稱為“GC”,即就是Java垃圾回收機制。 導讀: 1、什麼是GC 2、GC常用演算法 3、垃圾收集器 4、finalize()方法詳解 5、總結--根據GC原理來優化程式碼 正式閱讀之前需要了解相關概念: Java 堆記憶體分為新生代和老年代,新生
Java Set集合詳解及Set與List的區別
Java中的Set集合是繼承Collection的介面,是一個不包含重複元素的集合。 下圖是Set集合的原始碼。 Set和List都是以介面都形式來進行宣告。Set主要包含三種存放資料型別都變數,分別是HashSet,LinkedHashSet,TreeSet