美文网首页Java基础知识
使用反射技术分析类

使用反射技术分析类

作者: 第四单元 | 来源:发表于2019-01-10 11:38 被阅读6次
public class ReflectionTest {
    public static void main(String[] args) {
        String name = null;
        if(args.length != 0) {
            name = args[0];
        } else {
            Scanner sc = new Scanner(System.in);
            System.out.print("请输入类名,(如java.lang.Integer):");
            name = sc.next();
            sc.close();
        }

        try {
            Class clazz = Class.forName(name);
            String modifier = Modifier.toString(clazz.getModifiers());
            if(modifier.length() > 0)
                System.out.print(modifier + " ");
            System.out.print(name);
            Class superClass = clazz.getSuperclass();
            if(superClass != null && superClass != Object.class) {
                System.out.print(" extends " + superClass.getName());
            }
            System.out.println(" {");
            System.out.println("\t//Declare方法列表");
            printDeclareMethods(clazz);
            System.out.println("\t//Declare构造方法列表");
            printDeclareConstructors(clazz);
            System.out.println("\t//Declare属性列表");
            printDeclareField(clazz);
            System.out.print("}");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static void printDeclareMethods(Class clazz) {
        if(clazz == null) throw new IllegalArgumentException("入参不能为null");
        Method[] methods = clazz.getDeclaredMethods();
        for(Method m : methods) {
            String modifier = Modifier.toString(m.getModifiers());
            System.out.print("\t");
            if(modifier.length() > 0)
                System.out.print(modifier + " ");
            System.out.print(m.getReturnType().getName() + " " + m.getName() + "(");
            Class[] parameters = m.getParameterTypes();
            for(int i = 0; i < parameters.length; i++) {
                if(i > 0)
                    System.out.print(",");
                System.out.print(parameters[i].getName());
            }
            System.out.println(");");
        }
    }

    public static void printDeclareConstructors(Class clazz) {
        if(clazz == null) throw new IllegalArgumentException("入参不能为null");

        Constructor[] constructors = clazz.getDeclaredConstructors();
        for(Constructor c : constructors) {
            System.out.print("\t");
            String modifier = Modifier.toString(c.getModifiers());
            if(modifier.length() > 0)
                System.out.print(modifier + " ");
            System.out.print(c.getName() + "(");
            Class[] parameters = c.getParameterTypes();
            for(int i = 0; i < parameters.length; i++) {
                if(i > 0)
                    System.out.print(",");
                System.out.print(parameters[i].getName());
            }
            System.out.println(");");
        }
    }

    public static void printDeclareField(Class clazz) {
        if(clazz == null)
            throw new IllegalArgumentException("入参不能为null");
        Field[] fields = clazz.getDeclaredFields();
        for(Field f : fields) {
            System.out.print("\t");
            String modifier = Modifier.toString(f.getModifiers());

            if(modifier.length() > 0)
                System.out.print(modifier + " ");
            Class type = f.getType();
            System.out.print(type.getName() + " ");
            System.out.println(f.getName() + ";");
        }
    }
}

相关文章

  • 使用反射技术分析类

  • C#它山之石

    C# 使用反射技术实例化指定的类C#之玩转反射Reactive Extensions入门IoC solutions...

  • Java反射机制干货总结(一)

    一、初步认识反射### 使用反射,能够快速地应用开发工具动态地查询新添加类的能力。能够分析类能力的程序称为反射。反...

  • 2020-07-04【反射】

    类加载 类加载器 反射概述 获取Class类的对象 反射获取构造方法并使用 反射获取成员遍历并使用 反射获取成员方...

  • 反射

    我的博客 关于反射的定义和用途: 反射的定义 能够分析类能力的程序 反射的用途: 运行中分析类的能力 运行中查看对...

  • 六、【热修复二】Java层类加载热修复的简单实现

    使用到的技术点1、Java类加载机制;2、Android加载dex文件;3、反射;原理:用修复好的类替换有问题的类...

  • 反射---Class类

     能够分析类能力的程序称为反射。反射机制的功能极其强大,反射机制可以用来: 在运行时分析类的能力 在运行时查看对象...

  • 玩转java反射

    原文 类加载器什么是类加载器类加载器的职责类加载器的组成 反射什么是反射如何使用反射反射在Android中的应用 ...

  • Java创建对象的方式

    ·使用New关键字 ·使用反射的Class类的newInstance()方法: ·使用反射的Constructor...

  • Scala学习笔记(二)

    使用classOf[T]或者getClass()来获得类的反射。scala的本身没有反射,而使用java的反射机制...

网友评论

    本文标题:使用反射技术分析类

    本文链接:https://www.haomeiwen.com/subject/hlnorqtx.html