隨筆-124  評論-49  文章-56  trackbacks-0

          java.lang.Class
          在類加載時,java虛擬機會自動創建相應的class對象
          1.獲取class對象
          Class c=Class.froName("c");
          2.解析屬性信息
          Field[] fs=c.getDeclaredFields();
          for(Field f:fs){
             System.out.println("屬性:"+f.toString());
             System.out.println("數據類型:"+f.getType());
             System.out.println("屬性名:"+f.getName());
             int mod=f.getModifeers();
             System.out.println("屬性修飾符:"+Modifier.toString(mod));
          }
          3.解析方法信息
          Method[] ms=c.getDeclaredMethods();
          for(Method m:ms){
             System.out.println("方法:"+m.toString());
             System.out.println("方法名:"+m.getName());
             int mod=f.getModifeers();
             System.out.println("方法修飾符:"+Modifier.toString(mod));
             Class pts[] = m.getParameterTypes();//得到參數列表
             m.getReturnType();//得到返回值類型
          }
          4.解析構造方法
          Constructor[]  cs=c.getDeclaredConstructors();
          for(Constructor con:cs){
             System.out.println("構造方法:"+con.toString());
             System.out.println("方法名:"+con.getName());
             System.out.println("方法修飾符:"+Modifier.toString(mod));
             Class pts[] = m.getParameterTypes();//得到參數列表
             m.getReturnType();//得到返回值類型
          }
          5.解析當前類類型的父類
          Class superClass=c.getSuperclass();
          6.解析當前類實現的接口
          Class[] interfaces=c.getInterfaces();
          for(Class cl:interfaces){
             System.out.println(cl.toString());
          }
          7.解析當前包
          Package p=c.getPackage();
          ---------------------------------------------------------------

          1.直接操作對象屬性
          User u=new User();
          Class c=u.getClass();//同Class.forName("p2.User");
          Field f=c.getField(fieldName);
          Object fv=f.get(u);//得到對象u實例對應f屬性的值
          f.set(u,value);設置u對象f屬性的值為value
          2.調用對象成員方法
          Class[] argTypes={String.class,int.class};
          //上行等同Class[] argTypes=new Class[]{String.class,int.class};
          Object[] args=new Object[]{"王五",99};

          Class c-u.getClass();
          Method m=c.getMethod(methodName,argTypes);
          Object result=m.invoke(u,args);
          System.out.println(result);
          3.調用類成員方法
          Class c=Class.forName("className");
          Method m=c.getMethod(methodName,argTypes);
          Object result=m.invoke(null,args);//沒有對象,所以指定為null
          ---------------------------------------------------------------
          獲取class對象
          *針對引用數據類型
          1.調用靜態方法Class.forName()
          Class.forName("p1.User");
          2.調用Object類中定義的getClass()方法
          User u=new User();
          Class c=u.getClass();
          3.使用.class表達式
          Class c1=String.class;
          Class c2=p1.User.class;
          *針對基本數據類型及void
          1.使用.class表達式
          Class c1=int.class;
          Class c2=double.class;
          Class c3=void.class;
          2.調用相應封裝類的.Type屬性
          Class c1=Integer.TYPE;
          Class c2=Double.TYPE;
          Class c3=Void.TYPE;
          ----------------------------------------------
          java.lang.reflect.Field
          1.獲取Field對類(Class類提供)
          public Field[] getDeclaredFields()//當前類的所有屬性,不包括父類
          public Field getDeclaredField(String name)//當前類指定屬性,不包括父類
          public Field[] getFields()//當前類所有public的屬性,包括父類
          public Field getField(String name)//當前類指定的public屬性,包括父類
          2.Field類主要成員方法
          public Object get(Object obj)
          pbulic void set(Object obj,Object value)
          public xxx getXxx(Object obj)
          public void setXxx(Object obj,xxx x)//xxx為基本數據類型
          public String getName()
          public int getModifiers()//當前屬性的修飾符
          public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
          返回當前屬性前面的注釋
          public String toString()
          public boolean equals(Object obj)
          ------------------------------------------------------------------------
          java.lang.reflect.Method
          1.獲取Method對類(Class類提供)
          public Method[] getDeclaredMethods()//當前類的所有方法,不包括父類
          public Method getDeclaredMethod(String name,Class<?> parameterTypes)//當前類指定方法,不包括父類
          public Method[] getMethods()//當前類所有public的方法,包括父類
          public Method getMethod(String name)//當前類指定的public方法,包括父類
          2.Method類主要成員方法
          public Object invoke(Object obj,Object args)****
          public String getName()
          public Class<?>[] getParameterTypes()
          public int getModifiers()//當前屬性的修飾符
          public Class<?> getReturnType()
          public Class<?>[] getExceptionTypes()
          public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
          返回當前屬性前面的注釋
          public String toString()
          public boolean equals(Object obj)
          -----------------------------------------------------------
          java.lang.reflect.Modifier
          1.獲取Modifier對象
          public int getModifieers()
          2.Modifier類方法
          public static boolean isPublic(int mod)
          public static boolean isPrivate(int mod)

          --------------------------------------------------------------
          java.lang.reflect.Constructor
          public T newInstance(Object initargs)

          Class c=Class.forName("p1.Person");
          Class[] argTypes={String.class,int.class};//參數列表
          Constructor cons=c.getConstructor(argTypes);
          Object obj=cons.newInstance("中國",5000);

          調用無參構造方法
          cons=c.getconstructor();
          obj=constructor.newInstance();
          obj=c.newInstance();
          ----------------------------------------------------------------
          java.lang.reflect.Array

          class類方法
          public Class<?> getComponentType()//返回數組對象的數據類型

          posted on 2009-11-29 21:24 junly 閱讀(196) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 驻马店市| 石台县| 平谷区| 乳山市| 如东县| 祁门县| 阜新| 桓台县| 阿克苏市| 锡林郭勒盟| 信丰县| 曲麻莱县| 卢氏县| 崇明县| 宁海县| 武汉市| 罗田县| 峡江县| 永清县| 故城县| 新平| 泾源县| 安化县| 霞浦县| 临夏县| 四会市| 屯留县| 花垣县| 繁峙县| 哈巴河县| 华安县| 阜城县| 长垣县| 牡丹江市| 富锦市| 望城县| 成都市| 安平县| 曲沃县| 新郑市| 蕲春县|