打印一个类的全部信息

package test;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Scanner;

public class ReflectionTest {

    public static void main(String[] args) {
        //read class name from command line args or user input
        String name;
        if(args.length>0)
            name=args[0];
        else
        {
            var in=new Scanner(System.in);
            System.out.println("Enter class name (e.g. java.util.Date):");
            name=in.next();
        }

        //print class name and superclass name (if!=Object)
        Class cl=null,supercl=null;
        try {
            cl=Class.forName(name);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        supercl=cl.getSuperclass();
        String modifiers= Modifier.toString(cl.getModifiers());//返回修饰符
        if(modifiers.length()>0)
            System.out.print(modifiers+" ");
        System.out.print("class "+name);
        if(supercl!=null&&supercl!=Object.class)
            System.out.println(" extends "+supercl.getName());

        System.out.println("\n{");
        printConstructors(cl);
        System.out.println();
        printMethods(cl);
        System.out.println();
        printFields(cl);
    }

    //print all constructors of a class
    public static void printConstructors(Class cl)
    {
        Constructor[] constructors=cl.getDeclaredConstructors();//返回声明的全部构造器,但是不包括继承的 ;getConstructors()返回公共的,包括继承的
        for(Constructor c:constructors)
        {
            String name=c.getName();
            System.out.print("  ");
            String modifiers=Modifier.toString(c.getModifiers());
            if(modifiers.length()>0)
                System.out.print(modifiers+" ");
            System.out.print(name+"(");

            //print parameter types
            Class[] paramTypes=c.getParameterTypes();//得到方法签名中的参数
            for(int j=0;j<paramTypes.length;j++)
            {
                if(j>0)
                    System.out.print(paramTypes[j].getName());

            }
            System.out.println(");");
        }
    }

    //print all methods of a class
    public static void printMethods(Class cl)
    {
        Method[] methods=cl.getDeclaredMethods();

        for(Method m:methods)
        {
            Class retType=m.getReturnType();//得到返回类型
            String name=m.getName();

            System.out.print("  ");
            //print modifiers return type and method name
            String modifiers=Modifier.toString(m.getModifiers());
            if(modifiers.length()>0)
                System.out.print(modifiers+" ");
            System.out.print(retType.getName()+" "+name+"(");

            //print parameter type
            Class[] paramTypes=m.getParameterTypes();
            for(int j=0;j<paramTypes.length;j++)
            {
                if(j>0)
                    System.out.print(", ");
                System.out.print(paramTypes[j].getName());
            }
            System.out.println(");");
        }
    }

    //print all field of a class
    public static void printFields(Class cl)
    {
        Field[] fields=cl.getDeclaredFields();
        for(Field f:fields)
        {
            Class type=f.getType();
            String name=f.getName();
            System.out.print("  ");
            String modifiers=Modifier.toString(f.getModifiers());
            if(modifiers.length()>0)
                System.out.print(modifiers+" ");
            System.out.println(type.getName()+" "+name+";");
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值