簡述
java.lang.reflect 包中有三個(gè)類Field、Method、Constructor描述類的域、方法和構(gòu)造器。
1.都有g(shù)etName()方法,返回項(xiàng)目名稱。
2.都有g(shù)etModifiers()方法,返回整型數(shù)值,用不同的位開關(guān)描述public、static修飾符狀況使用Modifier類的靜態(tài)方法分析該數(shù)值。例如:isPublic,isPrivate,isFinal是否為public,private,final。Modifier,toString方法答應(yīng)修飾符。
Modifier.toString(*.getModifiers());
3.Class類中的getFields、getMethods和getConstructors方法將分別返回類提供的public域、方法和構(gòu)造數(shù)組,包括超類的公有成員。
Class類的getDeclareFields、getDeclareMethods和getDeclaredConstructors方法將分別返回全部域、方法、和構(gòu)造器,包括私有和受保護(hù)成員,不包括超類成員。
實(shí)例
public class reflect {
public static void main(String[] args) {
try{
String s = "java.util.Date";
Class c = Class.forName(s);//通過forName方法返回該類名的Class
String modifiers = Modifier.toString(c.getModifiers());//返回類修飾符使用狀況,public,static。。
System.out.print(modifiers+" "+"class"+" "+s);
Class c1 = c.getSuperclass();//獲取超類的Class
if(c1!=null&&c1!=Object.class){
System.out.print(" extends"+" "+c1.getName());//通過getName返回類名
}
System.out.print(" {"+"\n");
Constructor[] constructors = c.getConstructors(); //獲取該類下的所有構(gòu)造器
for(Constructor constructor:constructors){
System.out.print(" ");
modifiers = Modifier.toString(constructor.getModifiers());//獲取構(gòu)造器的修飾符狀況
if(modifiers.length()>0)
System.out.print(modifiers+" "+constructor.getName()+"(");//獲取構(gòu)造器名稱
Class[] paramTypes = constructor.getParameterTypes();//獲取構(gòu)造器所有參數(shù)的類
for(int i=0;i<paramTypes.length;i++){
if(i>0) System.out.print(",");
System.out.print(paramTypes[i].getName());
}
System.out.print(");\n");
}
System.out.print("\n\n");
Method[] methods = c.getDeclaredMethods();//獲取類中聲明的所有方法
for(Method method:methods){
modifiers = Modifier.toString(method.getModifiers());
Class retype=method.getReturnType();
System.out.print(" "+modifiers+" "+retype.getName()+" "+method.getName()+"(");
Class[] paramTypes= method.getParameterTypes();
for(int i=0;i<paramTypes.length;i++){
if(i>0) System.out.print(",");
System.out.print(paramTypes[i].getName());
}
System.out.print(");\n");
}
System.out.print("\n\n");
Field[] fields = c.getDeclaredFields();
for(Field field:fields){
modifiers = Modifier.toString(field.getModifiers());
Class f1 = field.getType();
System.out.print(" "+modifiers+" "+f1.getName()+" "+field.getName()+";"+"\n");
}
System.out.print("}");
}catch(Exception exception){
exception.printStackTrace();
}
}
}