首页 > 代码库 > Java-反射之获取方法信息

Java-反射之获取方法信息

简单地学习了一下Java的反射机制和Class类,我们就可以通过这种方式来获取一个类的详细信息。

1.获得基本数据类型和简单的类的类类型

1     public static void main(String[] args) {
2         Class c1 = int.class; // 拿到int的类类型 -- 相当于是int字节码
3         Class c2 = Integer.class; //Integer的类类型--与上面的int是不一样的
4         Class c3 = Void.class;
5         System.out.println(c1.getName());
6         System.out.println(c2.getName()); //取得类的完整名称
7         System.out.println(c2.getSimpleName()); //取得简单的类名
8 
9     }

2.打印类的信息--成员函数

/**
     * 打印类的信息,包括类的成员函数、成员变量
     * 
     * @param obj
     */
    public static void printClassMessage(Object obj) {
        Class c1 = obj.getClass(); // 获取该类的类类型,如果该类是Object的话,表示是Object的类类型,否则是Obejct子类的类类型
        System.out.println(c1.getName()); //获得该类的类名
        /**
         * 万事万物结尾对象,所以在类中,一个方法也是对象,是Method的对象
         * getMethods获取的是所有的public方法,包括从父类继承过来的方法
         * getDeclaredMethods 获取的是自己声明的方法,不论是什么访问权限
         */
        Method []method = c1.getMethods();
        for(int i = 0, n = method.length; i< n; i++)
        {
            //得到的是方法返回值类型的类类型--比如String,则得到的是String.class
            Class type = method[i].getReturnType();
            System.out.print(type.getSimpleName()+" ");
            //打印方法的名字
            System.out.print(method[i].getName() + "(");
            //获取参数列表的类类型
            Class [] methodParameterTypes = method[i].getParameterTypes();
            for(int j = 0, m = methodParameterTypes.length; j < m; j++)
            {
                System.out.print(methodParameterTypes[j].getSimpleName() + " ");
            }
            System.out.println(")");
        }
    }

 

3.获取构造方法的信息

 1         /**
 2          * 构造方法也是对象, 是Java.lang.reflect.Constructor的对象
 3          * getConstructors获得所有的public构造方法
 4          * getDeclaredConstructors获得所有的构造方法
 5          */
 6         Constructor[] declaredConstructors = c1.getDeclaredConstructors();
 7         for(int i = 0, n = declaredConstructors.length; i < n; i++)
 8         {
 9             System.out.print(declaredConstructors[i].getName() + "(");
10             Class ParameterTypes[] = declaredConstructors[i].getParameterTypes();
11             for(int j = 0, m =  ParameterTypes.length; j < m; j++)
12             {
13                 System.out.print(ParameterTypes[j].getName() + " ");
14             }
15             System.out.println(")");
16         }

 

Java-反射之获取方法信息