samtiger


          QQ:418148757
          Name:yangchuan
          數(shù)據(jù)加載中……
          java反射基礎(chǔ)
                  每一個(gè)java類在內(nèi)存中都對(duì)應(yīng)著有一個(gè)Class類對(duì)象,這個(gè)對(duì)象記錄著該java類的相關(guān)信息。我們可以通過(guò)這個(gè)Class對(duì)象去:
                      a: 在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類;
                       b:在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象。
                       c:在運(yùn)行時(shí)獲取任意一個(gè)類所具有的成員變量和方法。
                       d: 在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的可對(duì)外訪問(wèn)的方法;
                       e:在運(yùn)行時(shí)給任意一個(gè)對(duì)象的可對(duì)外訪問(wèn)的成員變量賦值;
            心情不是很好,現(xiàn)發(fā)點(diǎn)代碼。明天來(lái)修改吧,唉,居然為了女人心情不好。郁悶阿
          /*
           * @(#)UserType.java
           * createTime:2007-10-26 下午03:11:49
           
          */

          package com.zdsoft.javaiobase.ref;

          /**
           * 
          @author sam E-mail:ashan8888@163.com
           * 
          @version 1.0
           
          */

          public class UserType {
              
          private String name;

              
          private String sex;

              
          private int old;
              
              
          public String testName;

              
          public String getTestName() {
                  
          return testName;
              }


              
          public void setTestName(String testName) {
                  
          this.testName = testName;
              }


              
          public String getName() {
                  
          return name;
              }


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


              
          public int getOld() {
                  
          return old;
              }


              
          public void setOld(int old) {
                  old 
          = old;
              }


              
          public String getSex() {
                  
          return sex;
              }


              
          public void setSex(String sex) {
                  
          this.sex = sex;
              }

          }

          寫(xiě)一些反射測(cè)試代碼:
          /*
           * @(#)RefTest.java
           * createTime:2007-10-26 下午03:13:24
           
          */

          package com.zdsoft.javaiobase.ref;

          import java.lang.reflect.Field;
          import java.lang.reflect.Method;

          import junit.framework.TestCase;

          /**
           * 
          @author sam E-mail:ashan8888@163.com
           * 
          @version 1.0
           
          */

          public class RefTest extends TestCase {
              
              
          private Class cobj;

              @Override
              
          protected void setUp() throws Exception {
                  cobj 
          = Class.forName("com.zdsoft.javaiobase.ref.UserType");
              }


              
          public void testCreateObj() throws Exception {
                  System.out.println(cobj.newInstance());
              }


              
          public void testGetMethods() throws Exception {
                  Method[] methods 
          = cobj.getDeclaredMethods();
                  System.out.println(
          "-------Methods------");
                  
          for (Method m : methods) {
                      System.out.println(m.toString());
                  }

              }


              
          public void testGetMethod() throws Exception {
                  Method m 
          = cobj.getMethod("setName", String.class);
                  System.out.println(
          "-------a Method------");
                  System.out.println(m.toString());

              }

              
              
          public void testGetFields() throws Exception {
                  System.out.println(
          "------fileds-------");
                  Field[] fields 
          = cobj.getDeclaredFields();
                  
          for(Field f : fields){
                      System.out.println(f.getName());
                  }

              }

              
              
          public void testInvoke() throws Exception {
                  UserType userType 
          = (UserType) cobj.newInstance();
                  Method m 
          = cobj.getMethod("getName"null);        
                  Method ms 
          = cobj.getMethod("setName", String.class);
                  ms.invoke(userType,
          "sam");
                  System.out.println(
          "------invoke getName-------");
                  System.out.println(m.invoke(userType,
          null));
                  
              }

              
              
          public void testFiled() throws Exception {
                  Field f
          = cobj.getField("testName");
                  UserType userType 
          = (UserType) cobj.newInstance();
                  f.set(userType, 
          "sam");
                  Method m 
          = cobj.getMethod("getTestName"null);        
                  System.out.println(m.invoke(userType, 
          null));
              }

          }


                      

          posted on 2007-10-26 22:40 sam.chuan.yang 閱讀(338) 評(píng)論(1)  編輯  收藏

          評(píng)論

          # re: java反射基礎(chǔ) 2007-11-15 14:34 程佳

          多發(fā)些東西來(lái)喲
          我們好學(xué)習(xí)下撒

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 上高县| 西华县| 阜宁县| 安达市| 东乡| 钟祥市| 三穗县| 巴马| 革吉县| 武陟县| 沭阳县| 察雅县| 利川市| 牡丹江市| 台湾省| 天长市| 微博| 石台县| 岗巴县| 吴江市| 额敏县| 罗田县| 景洪市| 虎林市| 保康县| 蓝田县| 额敏县| 阿勒泰市| 南陵县| 芜湖市| 新建县| 南召县| 泌阳县| 太和县| 苏尼特左旗| 来凤县| 铁岭县| 石楼县| 道孚县| 修水县| 哈巴河县|