简述
java.lang.reflect 包中有三个类Field、Method、Constructor描述类的域、方法和构造器。
1.都有getName()方法,返回项目名称。
2.都有getModifiers()方法,返回整型数值,用不同的位开关描述public、static修饰符状况使用Modifier类的静态方法分析该数值。例如:isPublic,isPrivate,isFinal是否为public,private,final。Modifier,toString方法答应修饰符。
Modifier.toString(*.getModifiers());
3.Class类中的getFields、getMethods和getConstructors方法将分别返回类提供的public域、方法和构造数组,包括超类的公有成员。
Class类的getDeclareFields、getDeclareMethods和getDeclaredConstructors方法将分别返回全部域、方法、和构造器,包括私有和受保护成员,不包括超类成员。
实例
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(); //获取该类下的所有构造器
for(Constructor constructor:constructors){
System.out.print(" ");
modifiers = Modifier.toString(constructor.getModifiers());//获取构造器的修饰符状况
if(modifiers.length()>0)
System.out.print(modifiers+" "+constructor.getName()+"(");//获取构造器名称
Class[] paramTypes = constructor.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");
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();
}
}
}