精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

詳解Java反射機制實例

開發 后端
在 Java 運行時環境中,對于任意一個類,能否知道這個類有哪些屬性和方法?對于任意一個對象,能否調用它的任意一個方法?答案是肯定的。這種動態獲取類的信息,以及動態調用對象的方法的功能來自于Java 語言的反(Reflection)機制。

在 Java 運行時環境中,對于任意一個類,能否知道這個類有哪些屬性和方法?對于任意

一個對象,能否調用它的任意一個方法?答案是肯定的。這種動態獲取類的信息,以及動態

調用對象的方法的功能來自于Java 語言的反射(Reflection)機制。Java 反射機制主要提供

了以下功能:

在運行時判斷任意一個對象所屬的類;

在運行時構造任意一個類的對象;

在運行時判斷任意一個類所具有的成員變量和方法;

在運行時調用任意一個對象的方法;

生成動態代理。

在 JDK 中,主要由以下類來實現Java 反射機制,這些類都位于java.lang.reflect

包中。

Class類:代表一個類。

Field類:代表類的成員變量(成員變量也稱為類的屬性)。

Method類:代表類的方法。

Constructor 類:代表類的構造方法。

Array類:提供了動態創建數組,以及訪問數組元素的靜態方法。

如例程1所示DumpMethods 類演示了Reflection API的基本作用,它讀取命令

行參數指定的類名,然后打印這個類所具有的方法信息:

例程1:DumpMethods.java

Java代碼

 

 

  1. import java.lang.reflect.*;     
  2.     
  3. public class DumpMethods {     
  4.     public static void main(String args[]) throws Exception {     
  5.         // 加載并初始化命令行參數指定的類     
  6.         Class classType = Class.forName(args[0]);     
  7.         // 獲得類的所有方法     
  8.         Method methods[] = classType.getDeclaredMethods();     
  9.         for (int i = 0; i < methods.length; i++)     
  10.             System.out.println(methods[i].toString());     
  11.     }     
  12. }    

 

運行命令“java DumpMethods java.util.Stack”,就會顯示java.util.Stack類所具有的方法,程序的打印結果如下:

 

  1. public synchronized java.lang.Object java.util.Stack.pop()  
  2.  
  3. public java.lang.Object java.util.Stack.push(java.lang.Object)  
  4.  
  5. public boolean java.util.Stack.empty()  
  6.  
  7. public synchronized java.lang.Object java.util.Stack.peek()  
  8.  
  9. public synchronized int java.util.Stack.search(java.lang.Object)  

如例程2 所示ReflectTester 類進一步演示了Reflection API 的基本使用方法。

ReflectTester 類有一個copy(Object object)方法,這個方法能夠創建一個和參數object同樣類型的對象,然后把object對象中的所有屬性復制到新建的對象中,并將它返回。這個例子只能復制簡單的JavaBean,假定JavaBean的每個屬性都有public類型的

getXXX()和setXXX()方法。

例程2 ReflectTester.java

Java代碼

 

 

  1. import java.lang.reflect.*;     
  2.     
  3. public class ReflectTester {     
  4.     public Object copy(Object object) throws Exception {     
  5.         // 獲得對象的類型     
  6.         Class classType = object.getClass();     
  7.         System.out.println("Class:" + classType.getName());     
  8.         // 通過默認構造方法創建一個新的對象     
  9.         Object objectCopy = classType.getConstructor(new Class[] {})     
  10.                 .newInstance(new Object[] {});     
  11.         // 獲得對象的所有屬性     
  12.         Field fields[] = classType.getDeclaredFields();     
  13.         for (int i = 0; i < fields.length; i++) {     
  14.             Field field = fields[i];     
  15.             String fieldName = field.getName();     
  16.             String firstLetter = fieldName.substring(01).toUpperCase();     
  17.             // 獲得和屬性對應的getXXX()方法的名字     
  18.             String getMethodName = "get" + firstLetter + fieldName.substring(1);     
  19.             // 獲得和屬性對應的setXXX()方法的名字     
  20.             String setMethodName = "set" + firstLetter + fieldName.substring(1);     
  21.             // 獲得和屬性對應的getXXX()方法     
  22.             Method getMethod = classType.getMethod(getMethodName,     
  23.                     new Class[] {});     
  24.             // 獲得和屬性對應的setXXX()方法     
  25.             Method setMethod = classType.getMethod(setMethodName,     
  26.                     new Class[] { field.getType() });     
  27.             // 調用原對象的getXXX()方法     
  28.             Object value = getMethod.invoke(object, new Object[] {});     
  29.             System.out.println(fieldName + ":" + value);     
  30.             // 調用復制對象的setXXX()方法     
  31.             setMethod.invoke(objectCopy, new Object[] { value });     
  32.         }     
  33.         return objectCopy;     
  34.     }     
  35.     
  36.     public static void main(String[] args) throws Exception {     
  37.         Customer customer = new Customer("Tom"21);     
  38.         customer.setId(new Long(1));     
  39.         Customer customerCopy = (Customer) new ReflectTester().copy(customer);     
  40.         System.out.println("Copy information:" + customerCopy.getName() + " "    
  41.                 + customerCopy.getAge());     
  42.     }     
  43. }     
  44.     
  45. class Customer { // Customer類是一個JavaBean     
  46.     private Long id;     
  47.     private String name;     
  48.     private int age;     
  49.     
  50.     public Customer() {     
  51.     }     
  52.     
  53.     public Customer(String name, int age) {     
  54.         this.name = name;     
  55.         this.age = age;     
  56.     }     
  57.     
  58.     public Long getId() {     
  59.         return id;     
  60.     }     
  61.     
  62.     public void setId(Long id) {     
  63.         this.id = id;     
  64.     }     
  65.     
  66.     public String getName() {     
  67.         return name;     
  68.     }     
  69.     
  70.     public void setName(String name) {     
  71.         this.name = name;     
  72.     }     
  73.     
  74.     public int getAge() {     
  75.         return age;     
  76.     }     
  77.     
  78.     public void setAge(int age) {     
  79.         this.age = age;     
  80.     }     
  81. }   

 

執行結果:Class:Customer

id:1

name:Tom

age:21

Copy information:Tom 21

Class類是Reflection API中的核心類,它有以下方法。

getName():獲得類的完整名字。

getFields():獲得類的public類型的屬性。

getDeclaredFields():獲得類的所有屬性。

getMethods():獲得類的public類型的方法。

getDeclaredMethods():獲得類的所有方法。

getMethod(String name, Class[] parameterTypes):獲得類的特定方法,name 參

數指定方法的名字,parameterTypes參數指定方法的參數類型。

getConstrutors():獲得類的public類型的構造方法。

getConstrutor(Class[] parameterTypes):獲得類的特定構造方法,parameterTypes參數指定構造方法的參數類型。

如例程3 所示的InvokeTester 類的main()方法中,運用反射機制調用一個

InvokeTester 對象的add()和echo()方法。

例程3 InvokeTester.java

Java代碼

 

 

  1. import java.lang.reflect.*;     
  2.     
  3. public class InvokeTester {     
  4.     public int add(int param1, int param2) {     
  5.         return param1 + param2;     
  6.     }     
  7.     
  8.     public String echo(String msg) {     
  9.         return "echo:" + msg;     
  10.     }     
  11.     
  12.     public static void main(String[] args) throws Exception {     
  13.         Class classType = InvokeTester.class;     
  14.         Object invokeTester = classType.newInstance();     
  15.         // 調用InvokeTester對象的add()方法     
  16.         Method addMethod = classType.getMethod("add"new Class[] { int.class,     
  17.                 int.class });     
  18.         Object result = addMethod.invoke(invokeTester, new Object[] {     
  19.                 new Integer(100), new Integer(200) });     
  20.         System.out.println((Integer) result);     
  21.         // 調用InvokeTester對象的echo()方法     
  22.         Method echoMethod = classType.getMethod("echo",     
  23.                 new Class[] { String.class });     
  24.         result = echoMethod.invoke(invokeTester, new Object[] { "Hello" });     
  25.         System.out.println((String) result);     
  26.     }     
  27. }    

 

執行結果:300

echo:Hello

add()方法的兩個參數為int 類型,獲得表示add()方法的Method對象的代碼如下:

Method addMethod=classType.getMethod("add",new Class[]{int.class,int.class});

Method類的invoke(Object obj,Object args[])方法接收的參數必須為對象,如果參數為基本類型數據,必須轉換為相應的包裝類型的對象。invoke()方法的返回值總是對象,

如果實際被調用的方法的返回類型是基本類型數據,那么invoke()方法會把它轉換為相

應的包裝類型的對象,再將其返回。

在本例中,盡管InvokeTester 類的add()方法的兩個參數及返回值都是int 類型,調

用addMethod對象的invoke()方法時,只能傳遞Integer 類型的參數,并且invoke()方法的返回類型也是Integer 類型,Integer 類是int 基本類型的包裝類:

Object result=addMethod.invoke(invokeTester,

new Object[]{new Integer(100),new Integer(200)});

System.out.println((Integer)result); //result 為Integer類型

java.lang.Array 類提供了動態創建和訪問數組元素的各種靜態方法。如例程10-4

所示的ArrayTester1 類的main()方法創建了一個長度為10 的字符串數組,接著把索引

位置為5 的元素設為“hello”,然后再讀取索引位置為5 的元素的值。

例程10-4 ArrayTester1.java

Java代碼

 

 

  1. import java.lang.reflect.*;     
  2.     
  3. public class ArrayTester1 {     
  4.     public static void main(String args[]) throws Exception {     
  5.         Class classType = Class.forName("java.lang.String");     
  6.         // 創建一個長度為10 的字符串數組     
  7.         Object array = Array.newInstance(classType, 10);     
  8.         // 把索引位置為5 的元素設為"hello"     
  9.         Array.set(array, 5"hello");     
  10.         // 讀取索引位置為5 的元素的值     
  11.         String s = (String) Array.get(array, 5);     
  12.         System.out.println(s); //輸出hello     
  13.     }     
  14. }    

 

如例程10-5 所示的ArrayTester2 類的main()方法創建了一個5×10×15 的整型數

組,并把索引位置為[3][5][10]的元素的值為設37。

Java代碼

 

 

  1. import java.lang.reflect.*;     
  2.     
  3. public class ArrayTester2 {     
  4.     public static void main(String args[]) {     
  5.         int dims[] = new int[] { 51015 };     
  6.         Object array = Array.newInstance(Integer.TYPE, dims);     
  7.         // 使arrayObj 引用array[3]     
  8.         Object arrayObj = Array.get(array, 3);     
  9.         Class cls = arrayObj.getClass().getComponentType();     
  10.         System.out.println(cls);     
  11.         // 使arrayObj 引用array[3][5]     
  12.         arrayObj = Array.get(arrayObj, 5);     
  13.         // 把元素array[3][5][10]設為37     
  14.         Array.setInt(arrayObj, 1037);     
  15.         int arrayCast[][][] = (int[][][]) array;     
  16.         System.out.println(arrayCast[3][5][10]);     
  17.     }     
  18. }    

 

輸出:

class [I

37???

【編輯推薦】

  1. 深入剖析JAVA反射機制強大功能
  2. 關于Java反射機制的一個實例
  3. Java編譯過程與c/c++編譯過程有何不同
  4. Java虛擬機發展回顧 為跨平臺而生
  5. Java虛擬機(JVM)中的內存設置詳解
責任編輯:金賀 來源: JavaEye博客
相關推薦

2011-09-27 10:23:24

Java反射機制

2009-06-17 13:57:54

java實例Reflection

2011-04-01 14:50:56

Java的反射機制

2011-05-26 15:23:34

JavaReflection

2010-08-11 09:40:44

LINQ

2009-06-19 13:59:41

Java反射機制

2012-04-05 13:50:38

Java

2009-08-28 13:12:56

C#反射實例C#反射

2010-02-04 11:23:25

C++反射機制

2017-05-17 15:28:15

Java反射機制

2017-03-24 09:44:33

Java反射機制

2009-08-31 09:41:05

C#反射靜態方法開發

2009-04-10 09:55:44

C#反射.NET

2022-10-21 14:12:06

2010-09-17 13:02:11

JAVA反射機制

2012-02-08 09:44:52

Java反射

2009-06-11 08:59:35

2022-09-26 11:03:25

Java反射漏洞

2012-02-08 10:12:19

Java反射

2023-11-01 13:48:00

反射java
點贊
收藏

51CTO技術棧公眾號

亚洲成av人片在www色猫咪| 狠狠色丁香婷婷综合| 日韩精品在线视频观看| 成人毛片视频网站| 日韩电影免费| 天堂av在线一区| 中文字幕在线亚洲| 欧美激情第一区| 污污片在线免费视频| 99riav一区二区三区| 国产成人免费av电影| 免费观看特级毛片| 亚洲性视频在线| 精品久久久久久久久久久久久久 | 欧美性极品少妇| 亚洲欧洲一二三| www.日本在线观看| 国产精品毛片一区二区三区| 国产一区二区三区在线观看视频| 污污的视频免费观看| www在线看| 久久亚洲精品国产精品紫薇| 成人网在线免费观看| 日本a在线观看| 波多野结衣在线观看一区二区| 欧美夫妻性生活| 日韩欧美国产综合在线| 国产精品一区二区婷婷| 国产老女人精品毛片久久| 2019av中文字幕| 永久免费看片直接| 自拍偷拍精品| 日韩一区二区三区视频在线| 国产a级片免费观看| 2024短剧网剧在线观看| 久久久久久电影| 98国产高清一区| 中文字幕精品无码亚| 亚洲激情二区| 久久精品中文字幕一区| 中国毛片在线观看| 亚洲精品在线a| 欧美性猛交一区二区三区精品| wwwwww欧美| www.视频在线.com| 99精品在线免费| 91精品国产高清久久久久久91裸体 | 欧一区二区三区| 在线一区二区三区四区| 亚洲人精品午夜射精日韩| 嫩草在线视频| 久久精品人人做人人综合 | 国产成人日日夜夜| 国产在线一区二区三区| 亚洲天堂一区在线观看| 国精品一区二区三区| 色偷偷88888欧美精品久久久| 在线观看免费视频黄| 91精品视频一区二区| 欧洲在线/亚洲| 亚洲国产精品久久久久婷蜜芽| av免费看在线| |精品福利一区二区三区| 日本一区免费观看| 日韩a在线观看| 9色porny自拍视频一区二区| 97久久夜色精品国产九色| 91在线观看喷潮| 久久激情五月激情| 国产精品永久免费在线| 国产一级片一区二区| 久久xxxx精品视频| 清纯唯美亚洲综合| 国产黄色免费观看| 久久久久.com| 国产精品久久电影观看| 蜜臀尤物一区二区三区直播| 爽好多水快深点欧美视频| 浅井舞香一区二区| 成人a v视频| 日本不卡一区二区三区| 国产精品最新在线观看| 在线观看免费视频a| 卡一卡二国产精品 | 亚洲va欧美va人人爽成人影院| 91精品国产高清一区二区三区蜜臀| 国产女同无遮挡互慰高潮91| 国产精品毛片aⅴ一区二区三区| 在线区一区二视频| 国产l精品国产亚洲区久久| 国产黄色大片在线观看| 午夜不卡av在线| 国产一区二区在线视频播放| 婷婷综合六月| 欧美精品一二三| 手机av在线网站| 精品久久ai| 亚洲视频在线看| 任你操精品视频| 欧美国产91| 7777kkkk成人观看| 一级一级黄色片| 韩国av一区二区三区四区| 96久久精品| 手机av在线免费观看| 久久网站热最新地址| 亚洲一区三区视频在线观看 | 91在线免费视频观看| 日本精品一区二区三区不卡无字幕| 在线免费看av| 亚洲成人资源网| 精品少妇无遮挡毛片| 国产剧情一区二区在线观看| 亚洲成人久久网| 国产黄色录像视频| 黄色综合网站| 国产精品美女主播在线观看纯欲| av网站在线观看免费| 99re6这里只有精品视频在线观看| 日韩高清在线播放| 日本在线视频www鲁啊鲁| 色综合色狠狠天天综合色| 天堂av手机在线| 日韩极品在线| 久久国产精品久久久| 少妇高潮av久久久久久| 国产一区二区精品久久99| 欧美亚州在线观看| 欧美videosex性欧美黑吊| 日本韩国精品在线| 亚洲少妇一区二区三区| 日韩在线高清| 2020久久国产精品| 亚洲国产精品欧美久久| 欧美国产精品一区二区三区| 精品国产av无码一区二区三区| 亚洲日本在线观看视频| 日韩av网址在线| 在线免费日韩av| 日本成人在线电影网| 国产一区二区三区奇米久涩| 99自拍视频在线观看| 欧洲在线/亚洲| 中国一级特黄录像播放| 91精品1区| 国产欧美 在线欧美| 欧美伦理影视网| 天天综合天天做天天综合| 善良的小姨在线| 久久精品国产大片免费观看| 欧美中文在线视频| 免费看日韩av| 一区二区三区色| 色噜噜狠狠永久免费| 久久不见久久见国语| 性欧美长视频免费观看不卡| 国产人妖在线播放| 国产精品久久久久一区| chinese少妇国语对白| 亚洲传媒在线| 欧美性受xxx| 天堂中文资源在线| 精品久久久久久久久久国产 | 国产精品美女黄网| 3d玉蒲团在线观看| 日韩久久精品一区| 久久久久久蜜桃| 成人性生交大合| 精品无码国产一区二区三区av| 伊人久久亚洲| 国产+成+人+亚洲欧洲| 丰满肉嫩西川结衣av| 亚洲一区中文在线| 亚洲图片欧美另类| 亚洲激情自拍| 激情伦成人综合小说| 日日夜夜天天综合入口| 精品乱人伦一区二区三区| 九九热这里有精品视频| 丰满亚洲少妇av| 缅甸午夜性猛交xxxx| 99re91这里只有精品| 欧美精品999| 五月婷婷六月色| 亚洲国产一区二区三区| 91porn在线| 999亚洲国产精| 欧美午夜精品理论片a级大开眼界| 日韩久久一区二区三区| 日韩电影中文字幕| 97人妻精品视频一区| 中文字幕一区二区三区在线观看| 欧美人与性动交α欧美精品| 91精品一区二区三区综合在线爱| 亚洲一区中文字幕在线观看| 欧美草逼视频| 亚洲欧洲激情在线| 国产精品爽爽久久| 亚洲成a人v欧美综合天堂下载| 亚洲国产果冻传媒av在线观看| 久久激情综合| 人人妻人人澡人人爽精品欧美一区| 亚洲一级大片| 国产成人极品视频| av网站在线免费看推荐| 亚洲第一精品福利| 无码无套少妇毛多18pxxxx| 亚洲欧美综合网| 亚洲av无码一区二区三区网址| 日韩av成人高清| 国产专区在线视频| 国产精品美女久久久久久不卡 | 亚洲日本一区二区三区在线不卡| 午夜视频一区二区在线观看| 日本韩国欧美精品大片卡二| 毛片av在线| 日韩精品在线看| 国产三级在线观看视频| 欧美视频一二三| 91嫩草丨国产丨精品| 91麻豆蜜桃一区二区三区| 午夜视频在线网站| 亚洲综合好骚| 欧美日韩午夜爽爽| 日韩精品诱惑一区?区三区| 国产精品麻豆免费版| 欧美亚洲黄色| 日韩av电影中文字幕| 亚洲夜夜综合| 亚洲男人天堂古典| 亚洲欧美另类一区| 欧美久久久久久蜜桃| 69亚洲精品久久久蜜桃小说 | 免费成人美女女在线观看| 99视频在线精品| 色偷偷中文字幕| 美腿丝袜一区二区三区| 亚洲欧洲日产国码无码久久99| 五月开心六月丁香综合色啪 | 青青草综合网| 久久久久一区二区三区| 69精品国产久热在线观看| 国产免费久久av| 偷拍中文亚洲欧美动漫| 2024亚洲男人天堂| 超碰97国产精品人人cao| 久久精品一区中文字幕| 日本一卡二卡在线| 亚洲超碰在线观看| 99久久99| japansex久久高清精品| 国产精品入口尤物| 91精品韩国| 日韩在线观看av| 一级日韩一区在线观看| 永久免费未视频| 免费网站在线观看人| 男人天堂资源在线| 男插女视频久久久| 日本一区二区三区电影免费观看| 日韩精品第一区| 捆绑变态av一区二区三区| 亚洲欧洲日韩女同| 制服丝袜中文字幕亚洲| 久久久久九九九九| 日韩福利一区二区三区| 亚洲熟女乱综合一区二区| 免费看毛片网站| 韩国av一区二区三区| 在线视频日韩一区 | 一本到高清视频免费精品| 国产一级片视频| 亚洲一区在线免费观看| 青青草免费av| 一卡二卡三卡日韩欧美| 激情小说中文字幕| 亚洲成人高清在线| 亚洲精品1区2区3区| 懂色av一区二区三区| 国产精品100| 在线精品视频小说1| 做爰视频毛片视频| 91精品国产乱码久久蜜臀| 中文字幕精品在线观看| 欧美精品乱码久久久久久按摩| 97caocao| 91精品午夜视频| 老牛影视av牛牛影视av| 亚洲美女av在线| 国产女主播在线直播| 日韩亚洲欧美成人| av免费在线观| 97香蕉久久夜色精品国产| 国产精品av一区二区三区| 国产精品稀缺呦系列在线| 久久丁香四色| 国产精品视频一区二区三区不卡| 综合久久国产| 国产精品分类| 91免费视频网站在线观看| 亚洲综合精品| 自拍偷拍一区二区三区四区| 国产福利一区二区三区视频在线 | 久久久久久成人| 精品国产免费人成网站| 成人免费在线视频网站| 99久久人爽人人添人人澡| 久久另类ts人妖一区二区| 欧洲毛片在线视频免费观看| 中国 免费 av| 雨宫琴音一区二区在线| 香蕉视频网站入口| 国产98色在线|日韩| 亚洲AV无码成人精品区明星换面 | 色综合欧美在线| 999精品国产| 亚洲欧美自拍一区| 在线播放麻豆| 国模私拍一区二区三区| 暧暧视频在线免费观看| 国产中文欧美精品| 一区二区三区视频免费观看| 免费看黄色a级片| 日韩高清一区在线| 少妇激情一区二区三区视频| 国产精品久久夜| 国产无套丰满白嫩对白| 日韩欧美精品在线| 亚洲精品承认| 欧美专区国产专区| 成人av综合网| 大桥未久一区二区三区| 青青青伊人色综合久久| 中文字幕在线观看网址| 一区二区三区**美女毛片| 欧美日韩在线视频播放| 日韩av在线播放资源| 伊人手机在线| 成人国产精品av| 欧美少妇性xxxx| 黄色一级片播放| 成人一级黄色片| 国产成人免费在线观看视频| 欧美性猛交xxxx乱大交3| 国产三级视频在线播放| 中文字幕精品久久| 欧美电影网址| 久久久久久九九| 激情综合中文娱乐网| 无套内谢丰满少妇中文字幕| 国产婷婷色一区二区三区在线| 久久久精品99| 日韩三级中文字幕| 国产超级va在线视频| 成人激情视频免费在线| 99精品全国免费观看视频软件| 无需播放器的av| 欧美激情一区在线| 懂色av蜜臀av粉嫩av喷吹| 亚洲片在线观看| 精品国产免费人成网站| 欧美日韩无遮挡| 久久蜜桃精品| 美女被到爽高潮视频| 色婷婷av一区二区三区gif| 精品福利视频导航大全| 人人澡人人澡人人看欧美| 日韩极品在线| 久久国产乱子伦免费精品| 91亚洲男人天堂| 日本高清www免费视频| 亚洲精品福利在线| 澳门成人av网| 日产精品高清视频免费| 免费的成人av| 日韩三级在线观看视频| 日韩视频在线一区二区| 欧美寡妇性猛交xxx免费| 激情欧美一区二区三区中文字幕| 在线亚洲欧美| 国产精品天天干| 欧美四级电影在线观看| 国产视频在线播放| 99超碰麻豆| 一本久久综合| 白白色免费视频| 欧美绝品在线观看成人午夜影视| caopon在线免费视频| 高清国产在线一区| 狂野欧美一区| www.av免费| 日韩av一卡二卡| 国产精品第一| 成人在线免费观看网址| 在线高清一区| 国产ts在线播放| 欧美一区永久视频免费观看| 天天免费亚洲黑人免费| 国产又粗又大又爽的视频| 久久色中文字幕|