成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

樂字節(jié)Java反射之四:反射相關(guān)操作

DevYK / 3066人閱讀

摘要:大家好,樂字節(jié)小樂繼續(xù)為初學(xué)者講述基礎(chǔ)知識。上次說到樂字節(jié)反射之三方法數(shù)組類加載器,這次是反射之四反射相關(guān)操作操作屬性獲取對象獲取對象設(shè)置屬性打開權(quán)限獲取此屬性調(diào)用方法調(diào)用方法,都是直接對象方法實參反射之后,動態(tài)調(diào)用方法需要使用即可。

大家好,樂字節(jié)小樂繼續(xù)為Java初學(xué)者講述Java基礎(chǔ)知識。上次說到樂字節(jié)Java反射之三:方法、數(shù)組、類加載器,這次是Java反射之四:反射相關(guān)操作

1、操作屬性
//1、獲取Class對象
            Class clz=Class.forName("com.shsxt.ref.simple.User");
            //2、獲取對象
            User u=(User)clz.newInstance();
            //3、設(shè)置屬性
            Field field=clz.getDeclaredField("uname");
            field.setAccessible(true);//打開權(quán)限
            field.set(u, "0523");
            //4、獲取此屬性
            System.out.println(field.get(u));
2、調(diào)用方法

調(diào)用方法,都是直接對象.方法([實參]);反射之后,動態(tài)調(diào)用方法需要使用 invoke即可。

1)、方法調(diào)用

  //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、成員方法的調(diào)用
        m.invoke(u, "反射","多個參數(shù)");
        //若是靜態(tài)方法,傳遞null即可   因為靜態(tài)方法屬性類,不屬于對象
        m=clz.getMethod("testStatic",int.class);
        m.invoke(null, 100);//與對象無關(guān)

2)、操作setter與getter訪問器

/**
     * @param obj     操作的對象
     * @param att      操作的屬性
     * @param value  設(shè)置的值
     * */
 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、設(shè)置值
  setter(u,"uname","shsxt");
  //獲取值
  String str=(String) getter(u,"uname");
  System.out.println(str);
3、利用反射編寫簡單工廠設(shè)計模式

利用反射+配置文件可以實現(xiàn)簡單工廠模式。

interface  Car{
 void run();
}
class Bmw implements Car{
 public void run(){
  System.out.println("小樣,學(xué)的怎么樣");
 }
}
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;
 }
 /**
  * 根據(jù)字符串 創(chuàng)建對象
  * @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"));
  //獲取對應(yīng)的 完整路徑(報名.類名)
  String clz =pro.getProperty("qq");
  CarFactory.product(clz).run();
 }

Java反射相關(guān)知識就講到這里了,下次我們進入到JavaSE的課程:循環(huán)控制

請繼續(xù)關(guān)注樂字節(jié),Java知識技術(shù)分享,樂字節(jié)原創(chuàng)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75278.html

相關(guān)文章

  • 字節(jié)Java反射之一:反射概念與獲取反射源頭class

    摘要:一反射機制概念程序運行時,允許改變程序結(jié)構(gòu)或變量類型,這種語言稱為動態(tài)語言,如,是動態(tài)語言顯然,,不是動態(tài)語言,但是有著一個非常突出的動態(tài)相關(guān)機制。相關(guān)的為二獲取源頭重點打開權(quán)限所有類的對象其實都是的實例。 一、Java反射機制概念 程序運行時,允許改變程序結(jié)構(gòu)或變量類型,這種語言稱為動態(tài)語言,如Python, Ruby是動態(tài)語言;顯然C++,Java,C#不是動態(tài)語言,但是JAVA有...

    caikeal 評論0 收藏0
  • 字節(jié)Java反射之二:實例化對象、接口與父類、修飾符和屬性

    摘要:大家好,小樂繼續(xù)接著上集樂字節(jié)反射之一反射概念與獲取反射源頭這次是之二實例化對象接口與父類修飾符和屬性一實例化對象之前我們講解過創(chuàng)建對象的方式有克隆反序列化,再加一種,根據(jù)對象,使用或者構(gòu)造器實例化對象。 大家好,小樂繼續(xù)接著上集:樂字節(jié)Java反射之一:反射概念與獲取反射源頭Class 這次是之二:實例化對象、接口與父類、修飾符和屬性 一:實例化對象 之前我們講解過創(chuàng)建對象的方式,有...

    xietao3 評論0 收藏0
  • 字節(jié)Java反射之三:方法、數(shù)組、類加載器和類的生命周期

    摘要:本文承接上一篇樂字節(jié)發(fā)射之二實例化對象接口與父類修飾符和屬性繼續(xù)講述反射之三方法數(shù)組類加載器一方法獲取所有方法包括父類或接口,使用即可。當(dāng)沒有任何引用指向?qū)ο髸r就會被卸載,結(jié)束類的生命周期。 本文承接上一篇:樂字節(jié)Java發(fā)射之二:實例化對象、接口與父類、修飾符和屬性 繼續(xù)講述Java反射之三:方法、數(shù)組、類加載器 一、方法 獲取所有方法(包括父類或接口),使用Method即可。sho...

    ChanceWong 評論0 收藏0
  • Java注解-注解處理器、servlet3.0|字節(jié)

    摘要:擴展了反射機制的,以幫助程序員快速的構(gòu)造自定義注解處理器。返回該程序元素上存在的所有注解。在中,可以使用注解將一個繼承于的類標(biāo)注為可以處理用戶請求的。 大家好,我是樂字節(jié)的小樂,上次給大家?guī)砹薐ava注解-元數(shù)據(jù)、注解分類、內(nèi)置注解和自定義注解|樂字節(jié),這次接著往下講注解處理器和servlet3.0showImg(https://segmentfault.com/img/bVbvBP...

    wangshijun 評論0 收藏0
  • 字節(jié)Java循環(huán):循環(huán)控制和嵌套循環(huán)

    摘要:樂字節(jié)小樂上次講完了反射,接下來小樂給大家講述循環(huán)。循環(huán)有以下四部分一循環(huán)控制直到型先執(zhí)行后判斷,結(jié)構(gòu)為先執(zhí)行循環(huán)體,后判斷布爾表達式。 樂字節(jié)小樂上次講完了Java反射,接下來小樂給大家講述Java循環(huán)。 循環(huán)有以下四部分:showImg(https://segmentfault.com/img/bVbu0OJ?w=755&h=286); 一、循環(huán)控制 1、do..while 直到型...

    Euphoria 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<