A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

首先先定义一个china接口,一个Person类并实现此接口;
package it.javaSE;
interface china{
    public static final String NATIONAL ="chian";
    public static final String AUTHOR ="lemon";
    public void sayChina();;
    public String sayHellow(String name,int age);
}
class Person implements china{
    private String name;
    private int age ;
    public Person(){        
    }
    public Person(String name,int age ){
        this.name=name;
        this.age=age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    public void sayChina(){
        System.out.println("作者:"+AUTHOR+"国籍"+NATIONAL);
    }
    public String sayHellow(String name, int age)
    {
        return name+"的年龄是"+age+","+"会说Hellow";
    }   
}

现在利用反射获取Person的接口,父类名称,以及其构造方法;构造方法通过直接获取以及自定义获取;
package it.javaSE;

import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;

public class ClassReflect {

    public static void main(String[] args) {
        System.out.println(" ~~O(∩_∩)O~~O(∩_∩)O~~");
        Class <?> c1 = null;
        try {
            c1 = Class.forName("it.javaSE.Person");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        //取得实现的全部接口
        Class<?> [] ifs = c1.getInterfaces();
        /*因为接口是类的特殊形式,而且一个数组可以实现多个接口,
         * 所以用Class数组的形式将全部的接口对象返回,
         * 并利用循环的方式将内容依次输出;
         */
        for (int i = 0; i < ifs.length; i++) {
            System.out.println("实现的接口名称:"+ifs.getName());
        }
        System.out.println();


        System.out.println(" ~~O(∩_∩)O~~O(∩_∩)O~~");
        Class <?> c2 = null;
        try {
            c2 = Class.forName("it.javaSE.Person");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        //取得父类
        Class<?> superClass = c2.getSuperclass();
        System.out.println("父类名称:"+superClass.getName());
        System.out.println();


        System.out.println(" ~~O(∩_∩)O~~O(∩_∩)O~~");
        Class <?> c3 = null;
        try {
            c3 = Class.forName("it.javaSE.Person");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        //取得类的全部构造方法
        Constructor<?>[] cts1 = c3.getConstructors();
        /*以上取得了全部的构造方法,然后通过输出Constructor对象的完整信息,
         * 是比较全的信息;
         */
        for (int i = 0; i < cts1.length; i++) {
            System.out.println("构造方法:"+cts1);
        }
        System.out.println();


        System.out.println(" ~~O(∩_∩)O~~O(∩_∩)O~~");
        //c3取得了全部的构造方法,然后直接输出;当然,自己手工也可可以拼凑出完整信息。
        Class <?> c4 = null;
        try {
            c4 = Class.forName("it.javaSE.Person");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        //取得类的全部构造方法
        Constructor<?>[] cts2 = c4.getConstructors();
        /*以上取得了全部的构造方法,然后通过输出Constructor对象的完整信息,
         * 是比较全的信息;
         */
        for (int i = 0; i < cts2.length; i++) {
            //列出构造函数中的参数类型
            Class<?>[] ps = cts2.getParameterTypes();
            System.out.print("构造方法:");
            System.out.print(cts2.getModifiers()+" ");
            System.out.print(cts2.getName());
            System.out.print("(");
            for (int j = 0; j < ps.length; j++) {
                System.out.print(ps[j].getName()+ "  args"+j);
                if (j<ps.length-1) {
                    System.out.print(",");
                }
            }
            System.out.println("){}");
            /*
             * 从输出结果可以看出,已经去取出了构造方法的名称及参数类型,但是获取的权限是
             * 一个数字而不是public,这是因为java中对于方法的修饰符是使用一定的数字表现出来的
             * 如果要使数字变成用户能看懂的关键字,需用Modifier类完成。
             */         
        }
        System.out.println();

        //用Modifier类还原修饰符
        System.out.println(" ~~O(∩_∩)O~~O(∩_∩)O~~");
        Class <?> c5 = null;
        try {
            c5 = Class.forName("it.javaSE.Person");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        //取得类的全部构造方法
        Constructor<?>[] cts3 = c5.getConstructors();
        /*以上取得了全部的构造方法,然后通过输出Constructor对象的完整信息,
         * 是比较全的信息;
         */
        for (int i = 0; i < cts3.length; i++) {
            //列出构造函数中的参数类型
            Class<?>[] ps = cts3.getParameterTypes();
            System.out.print("构造方法:");
            int mo = cts3.getModifiers();
            System.out.print(Modifier.toString(mo)+" ");
            System.out.print(cts3.getName());
            System.out.print("(");
            for (int j = 0; j < ps.length; j++) {
                System.out.print(ps[j].getName()+ "  args"+j);
                if (j<ps.length-1) {
                    System.out.print(",");
                }
            }
            System.out.println("){}");
        }   

    }

}




2 个回复

倒序浏览
总结的很全面
回复 使用道具 举报

谢谢鼓励
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马