1. 程式人生 > >Java反射機制詳解 及 Method.invoke解釋

Java反射機制詳解 及 Method.invoke解釋

JAVA反射機制

JAVA反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個方法;這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為java語言的反射機制。
Java反射機制主要提供了以下功能: 在執行時判斷任意一個物件所屬的類;在執行時構造任意一個類的物件;在執行時判斷任意一個類所具有的成員變數和方法;在執行時呼叫任意一個物件的方法;生成動態代理。
1. 得到某個物件的屬性

Java程式碼  收藏程式碼
  1. public Object getProperty(Object owner, String fieldName) throws
     Exception {  
  2.      Class ownerClass = owner.getClass();  
  3.      Field field = ownerClass.getField(fieldName);  
  4.      Object property = field.get(owner);  
  5.      return property;  
  6. }  

 
Class ownerClass = owner.getClass():得到該物件的Class。

Field field = ownerClass.getField(fieldName):通過Class得到類宣告的屬性。

Object property = field.get(owner):通過物件得到該屬性的例項,如果這個屬性是非公有的,這裡會報IllegalAccessException。

2. 得到某個類的靜態屬性

Java程式碼  收藏程式碼
  1. public Object getStaticProperty(String className, String fieldName)  
  2.              throws Exception {  
  3.      Class ownerClass = Class.forName(className);  
  4.      Field field = ownerClass.getField(fieldName);  
  5.      Object property = field.get(ownerClass);  
  6.      return property;  
  7. }  

 

Class ownerClass = Class.forName(className) :首先得到這個類的Class。

Field field = ownerClass.getField(fieldName):和上面一樣,通過Class得到類宣告的屬性。

Object property = field.get(ownerClass) :這裡和上面有些不同,因為該屬性是靜態的,所以直接從類的Class裡取。

3. 執行某物件的方法

Java程式碼  收藏程式碼
  1. public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception {  
  2.      Class ownerClass = owner.getClass();  
  3.      Class[] argsClass = new Class[args.length];  
  4.      for (int i = 0, j = args.length; i < j; i++) {  
  5.          argsClass[i] = args[i].getClass();  
  6.      }  
  7.       Method method = ownerClass.getMethod(methodName,argsClass);  
  8.      return method.invoke(owner, args);  
  9. }  

 
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. 執行某個類的靜態方法

Java程式碼  收藏程式碼
  1. public Object invokeStaticMethod(String className, String methodName,  
  2.              Object[] args) throws Exception {  
  3.      Class ownerClass = Class.forName(className);  
  4.      Class[] argsClass = new Class[args.length];  
  5.      for (int i = 0, j = args.length; i < j; i++) {  
  6.          argsClass[i] = args[i].getClass();  
  7.      }  
  8.     Method method = ownerClass.getMethod(methodName,argsClass);  
  9.      return method.invoke(null, args);  
  10.  }  

 

基本的原理和例項3相同,不同點是最後一行,invoke的一個引數是null,因為這是靜態方法,不需要藉助例項執行。

5. 新建例項

Java程式碼  收藏程式碼
  1. public Object newInstance(String className, Object[] args) throws Exception {  
  2.      Class newoneClass = Class.forName(className);  
  3.      Class[] argsClass = new Class[args.length];  
  4.      for (int i = 0, j = args.length; i < j; i++) {  
  5.          argsClass[i] = args[i].getClass();  
  6.      }  
  7.      Constructor cons = newoneClass.getConstructor(argsClass);  
  8.      return cons.newInstance(args);  
  9. }  

 
這裡說的方法是執行帶引數的建構函式來新建例項的方法。如果不需要引數,可以直接使用newoneClass.newInstance()來實現。

Class newoneClass = Class.forName(className):第一步,得到要構造的例項的Class。

第5~第9行:得到引數的Class陣列。

Constructor cons = newoneClass.getConstructor(argsClass):得到構造子。

cons.newInstance(args):新建例項。

6. 判斷是否為某個類的例項

Java程式碼  收藏程式碼
  1. public boolean isInstance(Object obj, Class cls) {  
  2.      return cls.isInstance(obj);  
  3. }  

 
7. 得到陣列中的某個元素

Java程式碼  收藏程式碼
  1. public Object getByArray(Object array, int index) {  
  2.      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