java.lang.Class
在類(lèi)加載時(shí),java虛擬機(jī)會(huì)自動(dòng)創(chuàng)建相應(yīng)的class對(duì)象
1.獲取class對(duì)象
Class c=Class.froName("c");
2.解析屬性信息
Field[] fs=c.getDeclaredFields();
for(Field f:fs){
System.out.println("屬性:"+f.toString());
System.out.println("數(shù)據(jù)類(lèi)型:"+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();//得到返回值類(lèi)型
}
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();//得到返回值類(lèi)型
}
5.解析當(dāng)前類(lèi)類(lèi)型的父類(lèi)
Class superClass=c.getSuperclass();
6.解析當(dāng)前類(lèi)實(shí)現(xiàn)的接口
Class[] interfaces=c.getInterfaces();
for(Class cl:interfaces){
System.out.println(cl.toString());
}
7.解析當(dāng)前包
Package p=c.getPackage();
---------------------------------------------------------------
1.直接操作對(duì)象屬性
User u=new User();
Class c=u.getClass();//同Class.forName("p2.User");
Field f=c.getField(fieldName);
Object fv=f.get(u);//得到對(duì)象u實(shí)例對(duì)應(yīng)f屬性的值
f.set(u,value);設(shè)置u對(duì)象f屬性的值為value
2.調(diào)用對(duì)象成員方法
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)用類(lèi)成員方法
Class c=Class.forName("className");
Method m=c.getMethod(methodName,argTypes);
Object result=m.invoke(null,args);//沒(méi)有對(duì)象,所以指定為null
---------------------------------------------------------------
獲取class對(duì)象
*針對(duì)引用數(shù)據(jù)類(lèi)型
1.調(diào)用靜態(tài)方法Class.forName()
Class.forName("p1.User");
2.調(diào)用Object類(lèi)中定義的getClass()方法
User u=new User();
Class c=u.getClass();
3.使用.class表達(dá)式
Class c1=String.class;
Class c2=p1.User.class;
*針對(duì)基本數(shù)據(jù)類(lèi)型及void
1.使用.class表達(dá)式
Class c1=int.class;
Class c2=double.class;
Class c3=void.class;
2.調(diào)用相應(yīng)封裝類(lèi)的.Type屬性
Class c1=Integer.TYPE;
Class c2=Double.TYPE;
Class c3=Void.TYPE;
----------------------------------------------
java.lang.reflect.Field
1.獲取Field對(duì)類(lèi)(Class類(lèi)提供)
public Field[] getDeclaredFields()//當(dāng)前類(lèi)的所有屬性,不包括父類(lèi)
public Field getDeclaredField(String name)//當(dāng)前類(lèi)指定屬性,不包括父類(lèi)
public Field[] getFields()//當(dāng)前類(lèi)所有public的屬性,包括父類(lèi)
public Field getField(String name)//當(dāng)前類(lèi)指定的public屬性,包括父類(lèi)
2.Field類(lèi)主要成員方法
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ù)類(lèi)型
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對(duì)類(lèi)(Class類(lèi)提供)
public Method[] getDeclaredMethods()//當(dāng)前類(lèi)的所有方法,不包括父類(lèi)
public Method getDeclaredMethod(String name,Class<?> parameterTypes)//當(dāng)前類(lèi)指定方法,不包括父類(lèi)
public Method[] getMethods()//當(dāng)前類(lèi)所有public的方法,包括父類(lèi)
public Method getMethod(String name)//當(dāng)前類(lèi)指定的public方法,包括父類(lèi)
2.Method類(lèi)主要成員方法
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對(duì)象
public int getModifieers()
2.Modifier類(lèi)方法
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("中國(guó)",5000);
調(diào)用無(wú)參構(gòu)造方法
cons=c.getconstructor();
obj=constructor.newInstance();
obj=c.newInstance();
----------------------------------------------------------------
java.lang.reflect.Array
class類(lèi)方法
public Class<?> getComponentType()//返回?cái)?shù)組對(duì)象的數(shù)據(jù)類(lèi)型
posted on 2009-11-29 21:24
junly 閱讀(196)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
java