国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

傳智播客學習之java 反射

2019-11-21 00:58:36
字體:
來源:轉載
供稿:網友
此外,畢老師為我們講解了反射機制,雖然以后我們在開發過程中,不一定會涉及反射,但是反射確實java一種強大的工具,它使我們能夠創建靈活的代碼,這些代碼可以在運行時裝配,無需在組件之間進行源代表鏈接。例如在Tomcat類加載器這種機制被很多框架所使用。
一、什么是反射
反射的概念是由Smith在1982年首次提出,主要是指程序可以訪問、檢測和修改本身狀態行為的一種能力。反射是java程序開發語言的特征之一,它也允許運行中的 Java 程序對自身進行檢查,或者說“自審”,并能直接操作程序的內部屬性。
二、java反射所需要的類
1.Class類:它的實例表示正在運行的java應用程序中的類和接口
2.Constructor類:提供關于類的單個構造方法的信息以及對他的訪問權限。
3.Method類:提供有關類或接口的單獨的某個方法的信息
4.Array類:提供動態創建數組或訪問數組的靜態方法。
5.Field類:提供有關類或接口的屬性的信息,以及對他的動態訪問權限。
三、反射的功能
上面我們列舉了相關的類,那么具體利用這些類我們可以做一些什么事情呢?
1)獲取指定類的Class對象
方法一、通過對象.getClass.(例:Person p;Class c=p.getClass();)
方法二、通過Class類的forName方法(例:Class c=Class.forName(類名);)
方法三、通過類型名.class獲取(Class c = int.class)
2)在運行時構造任意一個類的對象,步驟如下:
① 根據類名來創建出它的對象
② 返回這個新創建的對象
l 使用無參構造方法,只需要用class對象的newInstance方法。
Class c=Class.forName(類名);Person p =(Person)c.newInstance;
l 使用有參的構造方法,步驟如下:
① 獲取指定類的對象(同上)
② 通過Class對象獲取滿足指定參數的要求的構造方法類對象
Constructor cons = c.getConstructor(String.class)
③ 調用指定Constructor對象的newInstance方法,傳入對用的參數值,創建出對象。
Person p =(Person)cons.newInstance(“張三”);
3)在運行時調用任意一個對象的方法,通過反射甚至可以調用到private方法
① 獲取指定類的對象(同上)
② 根據要求創建一個實例
③ 通過Class對象的getDeclaredMethods(根據需要可以選取不同方法)獲得Method 的實例,通過invoke方法調用方法
Method m=c.getDeclaredMethods(“setName”,String.class);
returnvalue = m.invoke(p,"zhangsan");
注意:如果是private方法,可以先調用這個方法對應的Method對象的setAccessible(true) 來取消對本方法的安全檢查
4)在運行時調用任意一個對象的屬性
① 獲取指定類的對象(同上)
② 根據要求創建一個實例
③ 通過Class對象的getDeclaredField(根據需要可以選取不同方法)獲得Field類 的實例,通過Set方法修改制定對象的值,get獲得對象的值。
Field f =c.getDeclaredField("name");
f.set(p,"張三");System.out.println(f.get(p));
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 正宁县| 泗洪县| 东安县| 德昌县| 南岸区| 灌南县| 渭南市| 宝清县| 高安市| 南溪县| 柏乡县| 临安市| 庄河市| 平乡县| 白朗县| 曲松县| 惠水县| 浏阳市| 高青县| 彩票| 湖南省| 台前县| 顺义区| 万安县| 黔西县| 新闻| 昌都县| 额敏县| 赤峰市| 甘南县| 新沂市| 沅江市| 卓尼县| 仁怀市| 汉川市| 蓝田县| 温泉县| 五河县| 辰溪县| 孟州市| 冕宁县|