初学反射

来源:互联网 发布:正规贵金属行情软件 编辑:程序博客网 时间:2024/05/17 23:23

显示打印一个类的全部信息

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);        }    }}
0 0
原创粉丝点击