成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JAVA反射機(jī)制功能用法解析

開發(fā) 后端
所謂的JAVA反射機(jī)制就是指“程序運(yùn)行時(shí),允許改變程序結(jié)構(gòu)或變量類型,這種語(yǔ)言稱為動(dòng)態(tài)語(yǔ)言”,JAVA反射機(jī)制在運(yùn)行狀態(tài)中對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法。

這里向大家簡(jiǎn)單介紹一下JAVA反射機(jī)制,JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法;這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為java語(yǔ)言的反射機(jī)制。

JAVA基礎(chǔ)--JAVA反射機(jī)制詳解  
 
JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法;這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為java語(yǔ)言的反射機(jī)制。

Java反射機(jī)制主要提供了以下功能:在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類;在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象;在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量和方法;在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法;生成動(dòng)態(tài)代理,請(qǐng)看下面詳細(xì)介紹。

1.JAVA反射機(jī)制得到某個(gè)對(duì)象的屬性

  1. 1publicObjectgetProperty(Objectowner,StringfieldName)  
  2.  
  3. throwsException{  
  4. 2ClassownerClass=owner.getClass();  
  5. 3  
  6. 4Fieldfield=ownerClass.getField(fieldName);  
  7. 5  
  8. 6Objectproperty=field.get(owner);  
  9. 7  
  10. 8returnproperty;  
  11. 9}  
  12.  

ClassownerClass=owner.getClass():得到該對(duì)象的Class。

Fieldfield=ownerClass.getField(fieldName):通過(guò)Class得到類聲明的屬性。

Objectproperty=field.get(owner):通過(guò)對(duì)象得到該屬性的實(shí)例,如果這個(gè)屬性是非公有的,這里會(huì)報(bào)IllegalAccessException。

2.JAVA反射機(jī)制得到某個(gè)類的靜態(tài)屬性

  1. 1publicObjectgetStaticProperty(StringclassName,
  2. StringfieldName)  
  3. 2throwsException{  
  4. 3ClassownerClass=Class.forName(className);  
  5. 4  
  6. 5Fieldfield=ownerClass.getField(fieldName);  
  7. 6  
  8. 7Objectproperty=field.get(ownerClass);  
  9. 8  
  10. 9returnproperty;  
  11. 10}  
  12.  

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

Fieldfield=ownerClass.getField(fieldName):和上面一樣,通過(guò)Class得到類聲明的屬性。

Objectproperty=field.get(ownerClass):這里和上面有些不同,因?yàn)樵搶傩允庆o態(tài)的,所以直接從類的Class里取。

3.JAVA反射機(jī)制執(zhí)行某對(duì)象的方法

  1. 1publicObjectinvokeMethod(Objectowner,StringmethodName,  
  2.  
  3. Object[]args)throwsException{  
  4. 2  
  5. 3ClassownerClass=owner.getClass();  
  6. 4  
  7. 5Class[]argsClass=newClass[args.length];  
  8. 6  
  9. 7for(inti=0,j=args.length;i<j;i++){  
  10. 8argsClass[i]=args[i].getClass();  
  11. 9}  
  12. 10  
  13. 11Methodmethod=ownerClass.getMethod(methodName,argsClass);  
  14. 12  
  15. 13returnmethod.invoke(owner,args);  
  16. 14}  
  17.  

Classowner_class=owner.getClass():首先還是必須得到這個(gè)對(duì)象的Class。

5~9行:配置參數(shù)的Class數(shù)組,作為尋找Method的條件。

Methodmethod=ownerClass.getMethod(methodName,argsClass):通過(guò)Method名和參數(shù)的Class數(shù)組得到要執(zhí)行的Method。

method.invoke(owner,args):執(zhí)行該Method,invoke方法的參數(shù)是執(zhí)行這個(gè)方法的對(duì)象,和參數(shù)數(shù)組。返回值是Object,也既是該方法的返回值。#p#

4.JAVA反射機(jī)制執(zhí)行某個(gè)類的靜態(tài)方法

  1. 1publicObjectinvokeStaticMethod(StringclassName,  
  2.  
  3. StringmethodName,  
  4. 2Object[]args)throwsException{  
  5. 3ClassownerClass=Class.forName(className);  
  6. 4  
  7. 5Class[]argsClass=newClass[args.length];  
  8. 6  
  9. 7for(inti=0,j=args.length;i<j;i++){  
  10. 8argsClass[i]=args[i].getClass();  
  11. 9}  
  12. 10  
  13. 11Methodmethod=ownerClass.getMethod
  14. (methodName,argsClass);  
  15. 12  
  16. 13returnmethod.invoke(null,args);  
  17. 14}  
  18.  

 基本的原理和實(shí)例3相同,不同點(diǎn)是***一行,invoke的一個(gè)參數(shù)是null,因?yàn)檫@是靜態(tài)方法,不需要借助實(shí)例運(yùn)行。

5.JAVA反射機(jī)制新建實(shí)例 

  1. 1  
  2. 2publicObjectnewInstance(StringclassName,  
  3.  
  4. Object[]args)throwsException{  
  5. 3ClassnewoneClass=Class.forName(className);  
  6. 4  
  7. 5Class[]argsClass=newClass[args.length];  
  8. 6  
  9. 7for(inti=0,j=args.length;i<j;i++){  
  10. 8argsClass[i]=args[i].getClass();  
  11. 9}  
  12. 10  
  13. 11Constructorcons=newoneClass.getConstructor(argsClass);  
  14. 12  
  15. 13returncons.newInstance(args);  
  16. 14  
  17. 15}  
  18.  

 這里說(shuō)的方法是執(zhí)行帶參數(shù)的構(gòu)造函數(shù)來(lái)新建實(shí)例的方法。如果不需要參數(shù),可以直接使用newoneClass.newInstance()來(lái)實(shí)現(xiàn)。

ClassnewoneClass=Class.forName(className):***步,得到要構(gòu)造的實(shí)例的Class。

第5~第9行:得到參數(shù)的Class數(shù)組。

Constructorcons=newoneClass.getConstructor(argsClass):得到構(gòu)造子。

cons.newInstance(args):新建實(shí)例。

6.判斷是否為某個(gè)類的實(shí)例

  1. 1publicbooleanisInstance(Objectobj,Classcls){  
  2. 2returncls.isInstance(obj);  
  3. 3}  
  4.  

7.得到數(shù)組中的某個(gè)元素 

  1. 1publicObjectgetByArray(Objectarray,intindex){  
  2. 2returnArray.get(array,index);  
  3. 3}  
  4.  

【編輯推薦】

  1. 深入剖析JAVA反射機(jī)制強(qiáng)大功能
  2. 關(guān)于Java反射機(jī)制的一個(gè)實(shí)例
  3. Java編譯過(guò)程與c/c++編譯過(guò)程有何不同
  4. Java虛擬機(jī)發(fā)展回顧 為跨平臺(tái)而生
  5. Java虛擬機(jī)(JVM)中的內(nèi)存設(shè)置詳解


 

責(zé)任編輯:佚名 來(lái)源: 賽迪網(wǎng)
相關(guān)推薦

2012-02-08 09:53:25

Java反射

2010-09-17 12:39:51

JAVA反射機(jī)制

2010-09-07 16:04:02

CSS

2012-04-05 13:50:38

Java

2017-03-24 09:44:33

Java反射機(jī)制

2017-05-17 15:28:15

Java反射機(jī)制

2011-03-09 09:11:52

java反射機(jī)制

2011-09-27 10:23:24

Java反射機(jī)制

2010-05-24 19:19:39

SVN組成

2011-04-01 14:50:56

Java的反射機(jī)制

2009-06-17 13:57:54

java實(shí)例Reflection

2010-02-23 10:15:22

WCF運(yùn)行機(jī)制

2010-08-09 15:09:27

Flex數(shù)據(jù)訪問(wèn)

2012-02-08 09:44:52

Java反射

2022-10-21 14:12:06

2011-11-23 09:39:33

JavaClassLOader機(jī)制

2011-05-26 15:23:34

JavaReflection

2010-08-11 09:40:44

LINQ

2023-11-01 13:48:00

反射java

2012-02-08 10:12:19

Java反射
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 一区二区三区亚洲 | 欧美成人手机在线 | 中文字幕成人在线 | 久久久久国产精品 | 一区二区三区日韩 | 久久久毛片| 成人在线电影在线观看 | 久久中文字幕一区 | 日韩美女一区二区三区在线观看 | 黄色网址在线免费播放 | 国产在线观看不卡一区二区三区 | 午夜性色a√在线视频观看9 | 五月婷婷激情网 | 国产亚洲欧美日韩精品一区二区三区 | 一区视频| 日韩在线不卡 | 日本网站在线看 | 色香婷婷 | 日韩免费一区二区 | 日本小电影在线 | 一区二区三区四区国产精品 | 日韩免费av一区二区 | 亚洲一区欧美 | 在线观看国产www | 国产三级精品三级在线观看四季网 | 久久国产美女视频 | 成人av在线大片 | 亚洲精品日韩一区二区电影 | 国产精品av久久久久久久久久 | 黑人精品xxx一区一二区 | 亚洲国产精品99久久久久久久久 | 午夜国产精品视频 | 日韩精品在线视频 | 久久网国产| 国产一区二区视频在线 | 国产福利二区 | 欧美在线一二三 | 一区二区三区四区免费观看 | 久久久蜜桃一区二区人 | 日韩av免费在线观看 | 国产亚洲一区精品 |