反射機制解析

主要參考http://blog.csdn.net/liujiahan629629/article/details/18013523 總結的,加一些補充
一,反射的概念:.
主要是指程序可以訪問,檢測和修改它本身狀態或行爲的一種能力,並能根據自身行爲的狀態和結果,調整或修改應用所描述行爲的狀態和相關的語義。
反射是java中一種強大的工具,能夠使我們很方便的創建靈活的代碼,這些代碼可以再運行時裝配,無需在組件之間進行源代碼鏈接。但是反射使用不當會成本很高!
二,反射機制的作用:
1,反編譯:.class–>.java
2,通過反射機制訪問java對象的屬性,方法,構造方法等;
這樣好像更容易理解一些,下邊我們具體看怎麼實現這些功能。
三,在這裏先看一下sun爲我們提供了那些反射機制中的類:
java.lang.Class;
java.lang.reflect.Constructor; java.lang.reflect.Field;
java.lang.reflect.Method;
java.lang.reflect.Modifier;
四,具體功能實現:
1,反射機制獲取類有3種方法,我們來獲取Employee類型
//第一種方式: 路徑有些需要
Class c1 = Class.forName(“Employee”);
//第二種方式:
//java中每個類型都有class 屬性.
Class c2 = Employee.class;
//第三種方式:
//java語言中任何一個java對象都有getClass 方法
Employee e = new Employee();
Class c3 = e.getClass(); //c3是運行時類 (e的運行時類是Employee)
2,創建對象:獲取類以後我們來創建它的對象,利用newInstance:
//創建此Class 對象所表示的類的一個新實例
Object o = c.newInstance(); //調用了Employee的無參數構造方法.
3,獲取屬性:分爲所有的屬性和指定的屬性:
a,先看獲取所有的屬性的寫法:
//獲取所有的屬性?
Field[] fs = c.getDeclaredFields();
Field[] fs = c.getFields()
b,獲取特定的屬性,對比着傳統的方法來學習:
Field field = c.getDeclaredField(“id”);
Field[] fs = c.getField(“id”);
備註:主要區別是getFields獲取類的public 字段.
getDeclaredField是可以獲取一個類的所有字段.
更重要的是非public修飾的字段獲取值需要額外添加一個限制
field .setAccessible(true);設置成可獲取
4,其他方法我就推薦看api

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