显示打印一个类的全部信息
package test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
import java.util.Date;
public class ReflectionTest {
public static void main(String[] args) {
// TODO 自动生成的方法存根
String name = "java.util.Date";
Date date = new Date();
Class cl = date.getClass();
//printConstructors(cl);
//printMethods(cl);
printFields(cl);
}
/**
* 获取类的构造器信息
* @param cl
*/
public static void printConstructors(Class cl){
//获取Class对象cl的构造器集合数组
Constructor[] constructors = cl.getDeclaredConstructors();
for(Constructor c : constructors){
//获取构造器方法名称字符串
String name = c.getName();
System.out.print(" ");
//Modifier类
//表示程序元素(如类、方法或字段)上的修饰符。
//Modifier.toString:返回此修饰符的小写名称
//class.getModifiers 返回此类或接口以整数编码的 Java 语言修饰符。
String modifiers = Modifier.toString(c.getModifiers());
if(modifiers.length()>0){
System.out.print(modifiers + " ");
}
System.out.print(name + "(");
//print parameter types
Class[] paraTypes = c.getParameterTypes();
for(int j=0;j<paraTypes.length;j++){
if(j>0){
System.out.print(", ");
}
System.out.print(paraTypes[j].getName());
}
System.out.println(")");
}
}
/**
* 获取所给Class对象的所有方法
* @param cl
*/
public static void printMethods(Class cl){
Method[] methods = cl.getMethods();
//getMethods:返回的所有的对象只是Class对象的公共的方法
//getDeclaredMethods:返回的所有对象是Class所表示的类或者接口的所有方法(包含 公有和私有)
//Field 和 Constructor 类似
for(Method m : methods){
String name = m.getName();
System.out.print(" ");
String modefiers = Modifier.toString(m.getModifiers());
if(modefiers.length()>0){
System.out.print(modefiers);
}
System.out.print(" "+name+"(");
Class[] paratypes = m.getParameterTypes();
for(int i=0; i<paratypes.length;i++){
if(i>0){
System.out.print(", ");
}
System.out.print(paratypes[i].getName());
}
System.out.println(")");
}
}
/**
* 获取Class对象所表示的类或者接口的所有的域的描述
* @param cl
*/
public static void printFields(Class cl){
Field[] fields = cl.getDeclaredFields();
for(Field f : fields){
String name = f.getName();
System.out.print(" ");
String modifier = Modifier.toString(f.getModifiers());
if(modifier.length()>0) {
System.out.print(modifier+ " ");
}
System.out.println(f.getType().getName() +" "+ name);
}
}
}