亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java反射機制及Method.invoke詳解

2019-11-26 15:16:24
字體:
來源:轉載
供稿:網友

JAVA反射機制

JAVA反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。

Java反射機制主要提供了以下功能: 在運行時判斷任意一個對象所屬的類;在運行時構造任意一個類的對象;在運行時判斷任意一個類所具有的成員變量和方法;在運行時調用任意一個對象的方法;生成動態代理。

1. 得到某個對象的屬性

復制代碼 代碼如下:

public Object getProperty(Object owner, String fieldName) throws Exception { 
     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); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲第一视频在线观看| 国产精品一区二区三区在线播放| 欧美在线不卡区| 性色av一区二区三区免费| 欧美亚洲国产另类| 亚洲激情电影中文字幕| 成人a视频在线观看| 日本欧美精品在线| 亚洲精品电影在线| 欧美一级视频免费在线观看| 57pao国产精品一区| 欧美激情网友自拍| 亚洲韩国青草视频| 夜夜嗨av色综合久久久综合网| 91在线高清视频| 日韩电影在线观看永久视频免费网站| 亚洲日本aⅴ片在线观看香蕉| 精品国产一区二区三区久久狼黑人| 日韩高清a**址| 日韩激情视频在线| 亚洲国产欧美精品| 亚洲三级黄色在线观看| 欧美精品videos| 正在播放国产一区| 欧美激情网站在线观看| 国产精品视频网| 久久99久国产精品黄毛片入口| 亚洲经典中文字幕| 91香蕉嫩草神马影院在线观看| 亚洲热线99精品视频| www.欧美精品| 国产精品极品美女在线观看免费| 色哟哟亚洲精品一区二区| 久久精品国产综合| 欧美在线视频一区二区| 青青草精品毛片| 欧美在线视频观看| 亚洲视频在线免费观看| 亚洲最新在线视频| 欧美巨猛xxxx猛交黑人97人| 日本午夜在线亚洲.国产| 精品久久久久久久久久国产| 国产日本欧美一区二区三区在线| 色噜噜狠狠狠综合曰曰曰88av| 2019中文字幕在线| 成人天堂噜噜噜| 96sao精品视频在线观看| 中文字幕av一区二区三区谷原希美| www.亚洲天堂| 久久精品国产清自在天天线| 精品美女久久久久久免费| 91久久精品国产91久久性色| 91美女片黄在线观| 92裸体在线视频网站| 久久久视频在线| 成人欧美一区二区三区在线湿哒哒| 国产亚洲精品久久久| 97在线精品国自产拍中文| 国产精品免费久久久久影院| 欧美壮男野外gaytube| 精品国产福利在线| 久久99国产精品久久久久久久久| 欧美激情亚洲一区| 欧美精品videosex极品1| 日韩欧美999| 成人h片在线播放免费网站| 欧美日韩亚洲激情| 国产精品高清在线| 亚洲www永久成人夜色| 91超碰中文字幕久久精品| 国产精品视频资源| 久久琪琪电影院| 日本精品久久久久影院| 日韩精品一二三四区| 欧美高跟鞋交xxxxxhd| 国产精品自在线| 久久色精品视频| 国产精品久久久久久久午夜| 日韩一区二区欧美| 97香蕉超级碰碰久久免费的优势| 色综合久久天天综线观看| 亚洲视频在线观看视频| 亚洲图片制服诱惑| 日本成人激情视频| 国产精品色午夜在线观看| 国产精品一区二区三区毛片淫片| 国产69精品99久久久久久宅男| 久久精品视频在线观看| 国产精品美女午夜av| 中文字幕欧美国内| 欧美日韩中文在线| 亚洲女同精品视频| 国产日韩欧美日韩大片| 97在线观看视频| 欧美激情综合亚洲一二区| 国产精品专区第二| 欧美老女人www| 久久久亚洲欧洲日产国码aⅴ| 久久久久日韩精品久久久男男| 国产69精品久久久久9| 深夜福利亚洲导航| 91精品国产色综合久久不卡98| 成人免费视频网址| 国产亚洲精品日韩| 亚洲一二在线观看| 国产性色av一区二区| 中文字幕欧美日韩va免费视频| 亚洲午夜精品久久久久久久久久久久| 久久久久久噜噜噜久久久精品| 中文字幕一区二区精品| 国产亚洲欧洲在线| 色777狠狠综合秋免鲁丝| 精品国偷自产在线| 欧美日韩国产成人高清视频| 日韩电影免费观看在线| 久久久人成影片一区二区三区观看| 国产日韩在线亚洲字幕中文| 精品久久久久久久久久ntr影视| 亚洲精选在线观看| 久久精品国产成人精品| 亚洲天堂成人在线视频| 欧美视频国产精品| 日韩亚洲精品视频| 日韩欧美福利视频| 91av在线国产| 国产精品自在线| 97精品国产97久久久久久春色| 久久久久久一区二区三区| 亚洲成人精品久久| 成人写真福利网| 日韩电影免费观看在线观看| 亚洲第一色在线| 国产精品女人久久久久久| 韩日精品中文字幕| 久久免费视频在线| 日韩欧美国产骚| 亚洲欧美一区二区三区四区| 久久精品男人天堂| 国产成人精品优优av| 欧美激情在线播放| 欧洲午夜精品久久久| 日韩视频中文字幕| www.xxxx精品| 91精品国产91久久久久久| 日韩精品久久久久| 国产精品免费在线免费| 色偷偷91综合久久噜噜| 欧美性猛交xxxxx水多| 国产精品678| 国产v综合ⅴ日韩v欧美大片| 亚洲精品网址在线观看| 久久久在线观看| 97精品免费视频| 色老头一区二区三区| 午夜精品蜜臀一区二区三区免费| 96sao精品视频在线观看| 欧美一区二区三区免费视| 7m第一福利500精品视频| 91热精品视频| 国产一区二区三区在线观看视频| 亚洲精品免费一区二区三区| 北条麻妃久久精品| 精品国产福利视频| 清纯唯美亚洲激情|