少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

          在類中尋找指定的方法,同時獲取該方法的參數列表,例外和返回值

          package com.abin.lee.reflect;

          import java.lang.reflect.Method;

          public class method1 {
           private int f1(Object p,int x) throws NullPointerException{
            if(p==null)
             throw new NullPointerException();
            return x;
           }
           public static void main(String[] args) {
            try {
             Class cls=Class.forName("com.abin.lee.reflect.method1");
             Method[] method=cls.getDeclaredMethods();
             for(int i=0;i<method.length;i++){
              Method m=method[i];
              System.out.println("name="+m.getName());
              System.out.println("decl class="+m.getDeclaringClass());
              Class pvec[]=m.getParameterTypes();
              for(int j=0;j<pvec.length;j++)
               System.out.println("param#"+j+" "+pvec[j]);
              Class evec[]=m.getExceptionTypes();
              for(int k=0;k<evec.length;k++)
               System.out.println("evec="+evec[k]);
              System.out.println("return type="+m.getReturnType());
             }
             
             
            } catch (Exception e) {
             e.printStackTrace();
            }
           }
           

          }






          獲取類的構造函數信息,基本上與獲取方法的方式相同

          package com.abin.lee.reflect;

          import java.lang.reflect.Constructor;

          public class constructor1 {
           public constructor1(){}
           public constructor1(int i,double d){}
           public static void main(String[] args) {
            try {
             Class<?> con=constructor1.class;
             Constructor cs[]=con.getConstructors();
             for(int i=0;i<cs.length;i++){
              Constructor ct=cs[i];
              System.out.println("name="+ct.getName());
              System.out.println("decl class="+ct.getDeclaringClass());
              Class pvec[]=ct.getParameterTypes();
              for(int j=0;j<pvec.length;j++){
               System.out.println("param="+pvec[j]);
              }
              Class excp[]=ct.getExceptionTypes();
              for(int j=0;j<excp.length;j++){
               System.out.println("exception="+excp[j]);
              }
              
              
             }
            } catch (Exception e) {
             e.printStackTrace();
            }
           }
          }







          獲取類中的各個數據成員對象,包括名稱。類型和訪問修飾符號:

          package com.abin.lee.reflect;

          import java.lang.reflect.Field;

          public class FieldTest {
           private double d;
           public static final int i=37;
           String s="testing";
           public static void main(String[] args) {
            Class<?> cls=FieldTest.class;
            Field field[]=cls.getDeclaredFields();
            for(int i=0;i<field.length;i++){
             Field fd=field[i];
             System.out.println("name="+fd.getName());
             System.out.println("class="+fd.getDeclaringClass());
             System.out.println("type="+fd.getType());
             int mod=fd.getModifiers();
             System.out.println("modifiers="+java.lang.reflect.Modifier.toString(mod));
             
            }
            
            
            
           }
          }


          posted on 2012-04-15 00:25 abin 閱讀(742) 評論(1)  編輯  收藏 所屬分類: Java反射機制

          Feedback

          # re: Java 反射機制(三)[未登錄] 2015-10-28 17:39 Tony
          給你一個類User ,里面有倆個私有屬性,name,int age,但是沒有set get方法, 反射生成對象,同時給兩個屬性值("abin",20) 賦值給這兩個屬性。不知道看懂沒?求樓主大嬸給我解答一下,小弟菜鳥。多謝!  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 安塞县| 锡林浩特市| 巢湖市| 容城县| 托克托县| 富川| 临武县| 收藏| 巴南区| 区。| 盐山县| 弋阳县| 比如县| 巴楚县| 巴林左旗| 万山特区| 柳河县| 高淳县| 乐清市| 故城县| 喀什市| 南开区| 玛多县| 潮州市| 四川省| 涟源市| 马山县| 萍乡市| 东明县| 太仆寺旗| 仁寿县| 平湖市| 河源市| 泾源县| 武陟县| 庄浪县| 班玛县| 赞皇县| 莱阳市| 平邑县| 万盛区|