摘要:大家好,樂字節小樂繼續為初學者講述基礎知識。上次說到樂字節反射之三方法數組類加載器,這次是反射之四反射相關操作操作屬性獲取對象獲取對象設置屬性打開權限獲取此屬性調用方法調用方法,都是直接對象方法實參反射之后,動態調用方法需要使用即可。
大家好,樂字節小樂繼續為Java初學者講述Java基礎知識。上次說到樂字節Java反射之三:方法、數組、類加載器,這次是Java反射之四:反射相關操作
1、操作屬性//1、獲取Class對象 Class> clz=Class.forName("com.shsxt.ref.simple.User"); //2、獲取對象 User u=(User)clz.newInstance(); //3、設置屬性 Field field=clz.getDeclaredField("uname"); field.setAccessible(true);//打開權限 field.set(u, "0523"); //4、獲取此屬性 System.out.println(field.get(u));2、調用方法
調用方法,都是直接對象.方法([實參]);反射之后,動態調用方法需要使用 invoke即可。
1)、方法調用
//1、獲取Class對象 Class> clz=Class.forName("com.shsxt.ref.simple.User"); //2、獲取對象 User u=(User)clz.newInstance(); //3、獲取方法 Method m =clz.getMethod("coding", String.class,String.class); //4、成員方法的調用 m.invoke(u, "反射","多個參數"); //若是靜態方法,傳遞null即可 因為靜態方法屬性類,不屬于對象 m=clz.getMethod("testStatic",int.class); m.invoke(null, 100);//與對象無關
2)、操作setter與getter訪問器
/** * @param obj 操作的對象 * @param att 操作的屬性 * @param value 設置的值 * */ public static void setter(Object obj, String att,Object value) { try { //setUname setUpwd -->第一個字母大寫 att=att.substring(0,1).toUpperCase()+att.substring(1); Method method = obj.getClass().getMethod("set" + att, value.getClass()); method.invoke(obj, value); } catch (Exception e) { e.printStackTrace(); } } public static Object getter(Object obj, String att) { try { //getUname getUpwd -->第一個字母大寫 att=att.substring(0,1).toUpperCase()+att.substring(1); Method method = obj.getClass().getMethod("get" + att); return method.invoke(obj); } catch (Exception e) { e.printStackTrace(); } return null; } main方法 //1、獲取Class對象 Class> clz=Class.forName("com.shsxt.ref.simple.User"); //2、獲取對象 User u=(User)clz.newInstance(); //3、設置值 setter(u,"uname","shsxt"); //獲取值 String str=(String) getter(u,"uname"); System.out.println(str);3、利用反射編寫簡單工廠設計模式
利用反射+配置文件可以實現簡單工廠模式。
interface Car{ void run(); } class Bmw implements Car{ public void run(){ System.out.println("小樣,學的怎么樣"); } } class QQ implements Car{ public void run(){ System.out.println("大哥,救我"); } } class Benz implements Car{ public void run(){ System.out.println("哈哈"); } } //簡單工廠 class CarFactory{ public static Car product2(String carStr){ if(carStr.equals("qq")){ return new QQ(); }else if(carStr.equals("benz")){ return new Benz(); } //如有其它車輛,需要添加代碼 return null; } /** * 根據字符串 創建對象 * @param carStr * @return */ public static Car product(String carStr){ try { return (Car)Class.forName(carStr).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return null; } } #car.properties qq=com.shsxt.ref.simplefactory.QQ benz=com.shsxt.ref. simplefactory.Benz bmw=com.shsxt.ref. simplefactory.Bmw public static void main(String[] args) throws Exception { //加載配置文件 Properties pro =new Properties(); pro.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("car.properties")); //獲取對應的 完整路徑(報名.類名) String clz =pro.getProperty("qq"); CarFactory.product(clz).run(); }
Java反射相關知識就講到這里了,下次我們進入到JavaSE的課程:循環控制
請繼續關注樂字節,Java知識技術分享,樂字節原創
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75278.html
摘要:一反射機制概念程序運行時,允許改變程序結構或變量類型,這種語言稱為動態語言,如,是動態語言顯然,,不是動態語言,但是有著一個非常突出的動態相關機制。相關的為二獲取源頭重點打開權限所有類的對象其實都是的實例。 一、Java反射機制概念 程序運行時,允許改變程序結構或變量類型,這種語言稱為動態語言,如Python, Ruby是動態語言;顯然C++,Java,C#不是動態語言,但是JAVA有...
摘要:大家好,小樂繼續接著上集樂字節反射之一反射概念與獲取反射源頭這次是之二實例化對象接口與父類修飾符和屬性一實例化對象之前我們講解過創建對象的方式有克隆反序列化,再加一種,根據對象,使用或者構造器實例化對象。 大家好,小樂繼續接著上集:樂字節Java反射之一:反射概念與獲取反射源頭Class 這次是之二:實例化對象、接口與父類、修飾符和屬性 一:實例化對象 之前我們講解過創建對象的方式,有...
摘要:本文承接上一篇樂字節發射之二實例化對象接口與父類修飾符和屬性繼續講述反射之三方法數組類加載器一方法獲取所有方法包括父類或接口,使用即可。當沒有任何引用指向對象時就會被卸載,結束類的生命周期。 本文承接上一篇:樂字節Java發射之二:實例化對象、接口與父類、修飾符和屬性 繼續講述Java反射之三:方法、數組、類加載器 一、方法 獲取所有方法(包括父類或接口),使用Method即可。sho...
摘要:擴展了反射機制的,以幫助程序員快速的構造自定義注解處理器。返回該程序元素上存在的所有注解。在中,可以使用注解將一個繼承于的類標注為可以處理用戶請求的。 大家好,我是樂字節的小樂,上次給大家帶來了Java注解-元數據、注解分類、內置注解和自定義注解|樂字節,這次接著往下講注解處理器和servlet3.0showImg(https://segmentfault.com/img/bVbvBP...
摘要:樂字節小樂上次講完了反射,接下來小樂給大家講述循環。循環有以下四部分一循環控制直到型先執行后判斷,結構為先執行循環體,后判斷布爾表達式。 樂字節小樂上次講完了Java反射,接下來小樂給大家講述Java循環。 循環有以下四部分:showImg(https://segmentfault.com/img/bVbu0OJ?w=755&h=286); 一、循環控制 1、do..while 直到型...
閱讀 3768·2023-04-25 21:09
閱讀 3128·2021-10-20 13:48
閱讀 2942·2021-09-24 10:25
閱讀 2931·2021-08-21 14:08
閱讀 1790·2019-08-30 15:56
閱讀 976·2019-08-30 15:52
閱讀 1841·2019-08-29 14:11
閱讀 3562·2019-08-29 11:01