java反射--获取成员变量信息

获取成员变量信息

代码及说明:

public static void printFieldMessage(Object obj)
    {
        //要获取类的信息,首先要获取类的类类型
        Class c=obj.getClass();    //传递的是哪个子类的对象,c就是该子类的类类型。
        //获取类的名称
        System.out.println("类的名称是"+c.getName());
        /*
         * 成员变量也是对象
         * java.lang.reflect.Field
         * Field类封装了关于成员变量的操作
         * getFields()方法获取的是所有的public的成员变量 
         * getDeclaredFields()获取的是该类自己声明的成员变量的信息
         * */
        Field[] fs=c.getDeclaredFields();
        for (Field field : fs) {
        
            //得到成员变量的类型的类类型
            Class fieldType=field.getType();
            String typeName=fieldType.getName();
            //得到成员变量的名称
            String fieldName=field.getName();
            
            System.out.println("成员变量:"+typeName+" "+fieldName);
        }
    }

调用该方法:

package com.reflect;

public class ClassDemo2 {

    public static void main(String[] args) {

        String s="hello";
        //ClassUtill.printClassMessage(s);
        Word w=new Word();
        ClassUtill.printFieldMessage(w);
    }
}

运行结果:

获取构造函数信息

代码及说明:

/*打印对象的构造函数信息*/
    public static void printConMessage(Object obj)
    {
        Class c=obj.getClass();
        /*
         * 构造函数也是对象
         * java.lang.Constrctor 中封装了构造函数的信息
         * */
        //Constructor[] cs=c.getConstructors();
        Constructor[] cs=c.getDeclaredConstructors();
        for(Constructor constructor:cs)
        {
            System.out.print(constructor.getName()+"(");
            //获取构造函数的参数列表
            Class[] paramTypes=constructor.getParameterTypes();
            for(Class class1:paramTypes)
            {
                System.out.print(class1.getName()+",");
            }
            System.out.println(")");
        }
    }

调用:

package com.reflect;

public class ClassDemo2 {

    public static void main(String[] args) {

        String s="hello";
        //ClassUtill.printClassMessage(s);
        Word w=new Word();
        //ClassUtill.printFieldMessage(w);
        ClassUtill.printConMessage("hello");
    }
}

结果:

原文地址:https://www.cnblogs.com/alsf/p/8245423.html