码迷,mamicode.com
首页 > 编程语言 > 详细

java 反射

时间:2015-10-06 22:07:21      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

1.获取class文件对象的三种方式。如果是自己写着玩,任选一种方式,实际开发用第三种。

        //方式1:Object类的getClass()方法
        Person person = new Person();
        Class c1 = person.getClass();
//方式2:数据类型的静态属性class Class c2 = Person.class; //方式3:Class类中的静态方法forName(); Class c3 = Class.forName("com.example.Person");

 2.获取构造方法并使用

        //获取字节码文件对象;
        Class c = Class.forName("com.example.Person");

        //获取所有公共构造方法
        Constructor[] cons1 = c.getConstructors();

        //获取所有构造方法
        Constructor[] cons2 = c.getDeclaredConstructors();

        //获取单个无参构造方法
        Constructor con3 = c.getConstructor();

        //获取单个带参的构造方法
        Constructor con4 = c.getConstructor(int.class, String.class);

        //获取私有构造方法
        Constructor con5 = c.getDeclaredConstructor(String.class);

        //通过无参构造方法创建类的新实例
        Object object1 = con3.newInstance();

        //通过带参的构造方法创建类的新实例
        Object object2 = con4.newInstance(10, "李雷");
        
        //通过私有构造方法创建类的新实例
        con5.setAccessible(true);//值为true则表示反射的对象在使用时应该取消java语言访问检查
        Object object3=con5.newInstance("韩梅梅");

 3.获取成员变量并使用

        //获取字节码文件对象;
        Class c = Class.forName("com.example.Person");

        //获取所有公共成员变量
        Field[] f1 = c.getFields();

        //获取所有成员变量
        Field[] f2 = c.getDeclaredFields();
        for (Field field : f2) {
            System.out.println(field);
        }

        //获取构造方法,创建对象
        Constructor con = c.getConstructor();
        Object obj = con.newInstance();

        //获取单个成员变量并赋值
        Field f3 = c.getField("city");//获取公有成员变量
        Field f4 = c.getDeclaredField("age");//获取成员变量(不管共有私有都能获取)
        f4.setAccessible(true);//取消访问检查
        f3.set(obj, "北京");//对象赋值
        f4.set(obj, 20);

 4.获取成员方法并使用

        //获取字节码文件对象;
        Class c = Class.forName("com.example.Person");

        //获取构造方法,创建对象
        Constructor con = c.getConstructor();
        Object obj = con.newInstance();

        //获取所有成员方法
        Method[] m1 = c.getMethods();//获取自己和父类的所有公共方法
        Method[] m2 = c.getDeclaredMethods();//获取自己的所有方法

        //获取无参单个方法并使用,public void show()
        Method m3 = c.getMethod("show");
        m3.invoke(obj);

        //获取有参有返回值单个方法并使用,public String say(String str)
        Method m4 = c.getMethod("say", String.class);
        Object objStr = m4.invoke(obj, "hello");

        //获取私有单个方法并使用,private void eay()
        Method m5=c.getDeclaredMethod("eay");
        m5.setAccessible(true);//取消访问检查
        m5.invoke(obj);

 

java 反射

标签:

原文地址:http://www.cnblogs.com/shijunzhang/p/4857562.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!