Java中的反射

反射(Reflect)就是把Java類中的各種成分映射成相應的Java類。例如,一個Java類中用一個Class類的對象來表示,一個類中的組成部分:成員變量,方法,構造方法,包等等信息也用一個個的Java類來表示,就像汽車是一個類,汽車中的發動機,變速箱等等也是一個個類。

表示Java類的Class類顯然要提供一系列的方法,來獲取其中的變量,方法,構造方法,修飾符,包等信息,這些信息就是用相應類的實例對象來表示,它們就是FieldMethodConstructorPackage等等。

 

l  構造方法的反射應用

 

下面來用反射機制實現下面這行代碼

 

String str1 = new String(new StringBuffer("abc"));

 

如下:

Constructor constructor = String.class.getConstructor(StringBuffer.class); //得到某一個構造方法

String str2 = (String) constructor.newInstance(new StringBuffer("abc")); //創建實例對象

System.out.println(str2);

 

l  成員變量的反射應用

 

 

l  成員方法的反射應用

 

Method methodCharAt = String.class.getMethod("charAt", int.class);

System.out.println(methodCharAt.invoke(str1, 1));

 

l  數組與Object的關係及其反射類型

int [] a1 = new int[]{1,2,3};

int [] a2 = new int[4];

int[][] a3 = new int[2][3];

String [] a4 = new String[]{"a","b","c"}; 

Object aObj1 = a1;

Object aObj2 = a4;

//Object[] aObj3 = a1;Object[]數組中的元素是Objectint []數組中的元素是int。這兩個就不能劃等號了

Object[] aObj4 = a3;

Object[] aObj5 = a4;

System.out.println(Arrays.asList(a1));//顯示不正常

System.out.println(Arrays.asList(a4));  //調用List Arrays.asList(Object[] a)Object[] a=a4,所以可以調用

 

l  數組的反射應用(Array()

舉例:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章