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

          java.lang.Class
          在類加載時(shí),java虛擬機(jī)會自動創(chuàng)建相應(yīng)的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("數(shù)據(jù)類型:"+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();//得到參數(shù)列表
             m.getReturnType();//得到返回值類型
          }
          4.解析構(gòu)造方法
          Constructor[]  cs=c.getDeclaredConstructors();
          for(Constructor con:cs){
             System.out.println("構(gòu)造方法:"+con.toString());
             System.out.println("方法名:"+con.getName());
             System.out.println("方法修飾符:"+Modifier.toString(mod));
             Class pts[] = m.getParameterTypes();//得到參數(shù)列表
             m.getReturnType();//得到返回值類型
          }
          5.解析當(dāng)前類類型的父類
          Class superClass=c.getSuperclass();
          6.解析當(dāng)前類實(shí)現(xiàn)的接口
          Class[] interfaces=c.getInterfaces();
          for(Class cl:interfaces){
             System.out.println(cl.toString());
          }
          7.解析當(dāng)前包
          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實(shí)例對應(yīng)f屬性的值
          f.set(u,value);設(shè)置u對象f屬性的值為value
          2.調(diào)用對象成員方法
          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.調(diào)用類成員方法
          Class c=Class.forName("className");
          Method m=c.getMethod(methodName,argTypes);
          Object result=m.invoke(null,args);//沒有對象,所以指定為null
          ---------------------------------------------------------------
          獲取class對象
          *針對引用數(shù)據(jù)類型
          1.調(diào)用靜態(tài)方法Class.forName()
          Class.forName("p1.User");
          2.調(diào)用Object類中定義的getClass()方法
          User u=new User();
          Class c=u.getClass();
          3.使用.class表達(dá)式
          Class c1=String.class;
          Class c2=p1.User.class;
          *針對基本數(shù)據(jù)類型及void
          1.使用.class表達(dá)式
          Class c1=int.class;
          Class c2=double.class;
          Class c3=void.class;
          2.調(diào)用相應(yīng)封裝類的.Type屬性
          Class c1=Integer.TYPE;
          Class c2=Double.TYPE;
          Class c3=Void.TYPE;
          ----------------------------------------------
          java.lang.reflect.Field
          1.獲取Field對類(Class類提供)
          public Field[] getDeclaredFields()//當(dāng)前類的所有屬性,不包括父類
          public Field getDeclaredField(String name)//當(dāng)前類指定屬性,不包括父類
          public Field[] getFields()//當(dāng)前類所有public的屬性,包括父類
          public Field getField(String name)//當(dāng)前類指定的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為基本數(shù)據(jù)類型
          public String getName()
          public int getModifiers()//當(dāng)前屬性的修飾符
          public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
          返回當(dāng)前屬性前面的注釋
          public String toString()
          public boolean equals(Object obj)
          ------------------------------------------------------------------------
          java.lang.reflect.Method
          1.獲取Method對類(Class類提供)
          public Method[] getDeclaredMethods()//當(dāng)前類的所有方法,不包括父類
          public Method getDeclaredMethod(String name,Class<?> parameterTypes)//當(dāng)前類指定方法,不包括父類
          public Method[] getMethods()//當(dāng)前類所有public的方法,包括父類
          public Method getMethod(String name)//當(dāng)前類指定的public方法,包括父類
          2.Method類主要成員方法
          public Object invoke(Object obj,Object args)****
          public String getName()
          public Class<?>[] getParameterTypes()
          public int getModifiers()//當(dāng)前屬性的修飾符
          public Class<?> getReturnType()
          public Class<?>[] getExceptionTypes()
          public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
          返回當(dāng)前屬性前面的注釋
          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};//參數(shù)列表
          Constructor cons=c.getConstructor(argTypes);
          Object obj=cons.newInstance("中國",5000);

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

          class類方法
          public Class<?> getComponentType()//返回?cái)?shù)組對象的數(shù)據(jù)類型

          posted on 2009-11-29 21:24 junly 閱讀(196) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 安塞县| 沛县| 大名县| 左贡县| 扎赉特旗| 彰化县| 永清县| 斗六市| 莆田市| 城固县| 松江区| 怀集县| 安康市| 特克斯县| 佛学| 察哈| 彰化市| 岚皋县| 黎平县| 柳江县| 林州市| 宜城市| 上饶市| 海安县| 富平县| 蓬莱市| 庆城县| 花垣县| 宝坻区| 临高县| 铜陵市| 金沙县| 峨山| 乌拉特后旗| 锡林郭勒盟| 汝州市| 永靖县| 若羌县| 通化市| 阳新县| 株洲县|