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()//返回數組對象的數據類型