初学反射

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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值