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

首頁 > 編程 > Java > 正文

Java反射機制(Reflection)淺析

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

Reflection也就是反射,是Java語言的一個重要特征,我們知道,在使用一個類之前,我們往往都已經創建好它了,比如創建一個類文件,然后再寫些屬性、方法等,也就是這種類是靜態的,但反射機制卻允許你動態地創建一個類。除了動態地創建一個類外,我們還能動態地獲取同類對象的數據,并將這些數據賦給新創建的類,這有點類似克隆復制。在很多時候,我們都需要這種動態創建類的特征,比如在處理一些業務,但這些業務卻又稍有區別的時候,往往對應著多個類,在處理的時候,我們就要根據不同的業務處理來調用不同的類,這個時候反射機制就派上用場了。

以下是JDK API中關于軟件包java.lang.reflect的描述:

提供類和接口,以獲取關于類和對象的反射信息。在安全限制內,反射允許編程訪問關于加載類的字段、方法和構造方法的信息,并允許使用反射字段、方法和構造方法對對象上的基本對等項進行操作。

如果必需的 ReflectPermission 可用,則 AccessibleObject 允許抑制訪問檢查。

Arrays 提供動態創建和訪問數組的靜態方法。

此包中的類以及 java.lang.Class 可以適應以下應用程序的需要:調試程序、解釋程序、對象檢查程序、類瀏覽程序,以及服務(比如,Object Serialization 和 JavaBean,它們需要訪問目標對象(基于其運行時類)的公共成員或給定類聲明的成員)。

下面通過兩個簡單例子來說明反射的用法,首先先創建一個Person類:

復制代碼 代碼如下:

package test;

public class Person {

private int age;

private String name = "";

private String[] arr = new String[2];

public Person(){}

public Person(String name,int age){
this.name = name;
this.age = age;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String[] getArr() {
return arr;
}

public void setArr(String[] arr) {
this.arr = arr;
}

}

實例1:得到Person類的屬性及方法信息

復制代碼 代碼如下:

private static void testSimpleReflect(){
String className = "test.Person";
try {
Class c = Class.forName(className);
Field[] fields = c.getDeclaredFields();
Method[] m = c.getDeclaredMethods();
for (Field field : fields){
System.out.println(field.getName());
}
for (Method method : m){
System.out.println(m.getClass());
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

這種是非常簡單的,通過類所在包路徑來得到一個類,在實際的工作中,也是使用最多的。

實例2:對象復制

復制代碼 代碼如下:

@SuppressWarnings("unchecked")
public static Object copy(Object object) throws Exception {
// 獲得對象類型
Class classType = object.getClass();
System.out.println("" + classType.getName()); // 通過默認構造方法創建一個新的對象
Object objectCopy = classType.getConstructor(new Class[] {})
.newInstance(new Object[] {}); // 獲得對象的所有屬性
Field fields[] = classType.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
String fieldName = field.getName();
String firstLetter = fieldName.substring(0, 1).toUpperCase(); // 獲得和屬性對應的getXXX()方法的名字
String getMethodName = "get" + firstLetter + fieldName.substring(1); // 獲得和屬性對應的setXXX()方法的名字
String setMethodName = "set" + firstLetter + fieldName.substring(1); // 獲得和屬性對應的getXXX()方法
Method getMethod = classType.getMethod(getMethodName,
new Class[] {}); // 獲得和屬性對應的setXXX()方法
Method setMethod = classType.getMethod(setMethodName,
new Class[] { field.getType() }); // 調用原對象的getXXX()方法
Object value = getMethod.invoke(object, new Object[] {});
System.out.println(fieldName + ":" + value); // 調用拷貝對象的setXXX()方法
setMethod.invoke(objectCopy, new Object[] { value });
}
return objectCopy;
}

利用反射來實現對象的復制,我們通常不用自己這么干,因為開源系統BeanUtils已經替我們做好對象拷貝的封裝了,我們直接調用它的方法即可,但值得注意的是,BeanUtils也是基于反射機制來做的封裝

下面是一調用:

復制代碼 代碼如下:

public static void main(String[] args){
Person person = new Person("tom",22);
String[] strs = new String[]{"a","b"};
person.setArr(strs);
try {
Person p = (Person)copy(person);
System.out.println(p.getName()+">>"+p.getAge());
for (String str : p.getArr()){
System.out.println(str);
}
} catch (Exception e) {
e.printStackTrace();
}
//        testSimpleReflect();
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美老少配视频| 欧美成人精品在线播放| 亚洲第一精品福利| 日本精品va在线观看| 在线播放国产一区中文字幕剧情欧美| 欧美大人香蕉在线| 成人做爰www免费看视频网站| 国产精品亚洲一区二区三区| 91精品国产色综合久久不卡98| 欧美国产极速在线| 精品美女久久久久久免费| 69影院欧美专区视频| 伊是香蕉大人久久| 91精品国产高清自在线看超| 中文字幕免费精品一区高清| 国产香蕉一区二区三区在线视频| 亚洲最大激情中文字幕| 国产精品视频网站| 国产精品igao视频| 欧美日韩精品国产| 久久综合五月天| 91爱爱小视频k| 欧美一级电影久久| 国产日韩欧美夫妻视频在线观看| 国产精品久久久| 久久久久久国产三级电影| 久久久久久亚洲精品不卡| 亚洲国产毛片完整版| 免费99精品国产自在在线| 7777免费精品视频| 欧美色播在线播放| 亚洲福利视频网| 亚洲视频在线观看视频| 亚洲美女性生活视频| 国产精品丝袜白浆摸在线| 国产精品爱久久久久久久| 亚洲视频精品在线| 欧洲成人在线视频| 欧美丰满少妇xxxx| 国产美女精品视频免费观看| 国产日韩在线一区| 中文字幕精品网| 色爱av美腿丝袜综合粉嫩av| 国模gogo一区二区大胆私拍| 国产精品日日做人人爱| 精品国产老师黑色丝袜高跟鞋| 日韩中文在线中文网三级| 国产精品香蕉av| 日韩视频一区在线| 国内免费精品永久在线视频| 国产男女猛烈无遮挡91| 日韩精品999| 国产精品视频久| 久久天天躁狠狠躁夜夜爽蜜月| 国产日产亚洲精品| 国模精品一区二区三区色天香| 亚洲精品99久久久久中文字幕| 欧美成人免费在线观看| 日韩美女免费观看| 亚洲精品www| 亚洲欧美国产一区二区三区| 国产成人一区二区三区电影| 久99九色视频在线观看| 国产婷婷97碰碰久久人人蜜臀| 久久97精品久久久久久久不卡| 久久久999精品免费| 午夜精品福利视频| 亚洲美女中文字幕| 日韩欧美福利视频| 国产国语videosex另类| 精品久久中文字幕| 狠狠躁天天躁日日躁欧美| 欧美日韩免费看| 青青草成人在线| 国产日韩专区在线| 中文字幕日韩欧美在线视频| 91亚洲永久免费精品| 综合久久五月天| 欧美成人剧情片在线观看| 久久成人精品电影| 欧美日韩性视频| 日本成人在线视频网址| 欧美高清自拍一区| 国产成人精品a视频一区www| 亚洲欧美精品suv| 欧美专区日韩视频| 91久久综合亚洲鲁鲁五月天| 亚洲国产成人精品电影| 亚洲综合在线播放| 国产日韩综合一区二区性色av| 欧美另类交人妖| 久久伊人精品天天| 久久久黄色av| 亚洲精品理论电影| 岛国av一区二区三区| 亚洲欧洲视频在线| 亚洲国产精品视频在线观看| 国产精品久久久久一区二区| 精品动漫一区二区| 亚洲人成网在线播放| 久久精品视频va| 中文字幕精品久久久久| 91精品国产自产在线老师啪| 亚洲老头同性xxxxx| 久久精品国产精品亚洲| 欧美老女人xx| 国产精品免费一区| 中文字幕成人精品久久不卡| 亚洲自拍偷拍网址| 4444欧美成人kkkk| 91色视频在线导航| 另类视频在线观看| 最近2019中文免费高清视频观看www99| 久久91亚洲人成电影网站| 久久国产精品首页| 亚洲美女动态图120秒| 国产精品va在线播放| 国产精品免费福利| 日本精品久久久久影院| 亚洲精品电影在线观看| 91产国在线观看动作片喷水| 热久久这里只有| 亚洲美女精品久久| 久久久久久久久久久国产| 亚洲成人黄色网| 午夜伦理精品一区| 久久人91精品久久久久久不卡| 91网在线免费观看| 在线日韩第一页| 97超级碰碰人国产在线观看| 久久亚洲一区二区三区四区五区高| 欧美丰满少妇xxxxx| 中文日韩在线观看| 国产激情综合五月久久| 亚洲二区在线播放视频| 91久久中文字幕| 久久久国产精品一区| 亚洲精品99久久久久| 日韩av免费在线| 午夜精品一区二区三区在线播放| 精品动漫一区二区| 久久九九精品99国产精品| 午夜精品久久久久久久久久久久| 亚洲最新在线视频| 色哟哟网站入口亚洲精品| 性色av一区二区三区免费| 久久韩国免费视频| 欧美精品中文字幕一区| 国产精品视频大全| 亚洲aa在线观看| 亚洲一区二区三区在线免费观看| 国产精品成人播放| 亚洲成人av资源网| 色综合伊人色综合网站| 亚洲性生活视频在线观看| 国产精品男人的天堂| 欧美日在线观看| 91av在线不卡| 亚洲日本成人女熟在线观看| 91久久国产婷婷一区二区| 久久久久久网址| 国产69精品99久久久久久宅男| 成人黄色片在线| 国产精品久久久久久久久久新婚|