反射

反射描述

  Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。

获取Class对象的3种方式

 

//1 通过类型获得
Class clazz1 = Bean.class;

//2 通过实例对象获得
Bean bean = new Bean();
Class clazz2 = bean.getClass();

//3 通过字符串获得
// 语法:Class.forName("全限定类名")
Classclazz3 = Class.forName("com.itheima_00_Bean.Bean");

 

获取Constructor对象的方式以及利用构造器对象创建对象

        //获取共有构造器对象----通过构造器对象创建对应的对象
        Constructor<Student> constructor1 = stuClz.getConstructor();
        Student student1 = constructor1.newInstance();
        Constructor<Student> constructor2 = stuClz.getConstructor(String.class, String.class);
        Student zs = constructor2.newInstance("1", "张三");
        //获取私有构造器对象----通过构造器对象创建对应的对象
        Constructor<Student> constructor = stuClz.getDeclaredConstructor(String.class);
        constructor.setAccessible(true);
        Student student = constructor.newInstance("老李");

获取Field对象然后获取字段对象的值

        Student student = new Student();
        Class<? extends Student> stuClz = student.getClass();
        //获取公有Field对象
        Field idField = stuClz.getField("id");
        idField.set(student,"10");//设置student对象的id字段值
        idField.get(student);//获取student对象的id字段值
        //获取私有Field对象
        Field nameField = stuClz.getDeclaredField("name");
        nameField.setAccessible(true);
        nameField.set(student,"张三");
        nameField.get(student);    

获取Method对象然后通过方法对象调用XX对象的方法

        Student student = new Student();
        Class<? extends Student> stuClz = student.getClass();
        //获取公有Method对象
        Method eatMethod = stuClz.getMethod("eat", String.class);
        eatMethod.invoke(student,"肉");
        //获取私有Method对象
        Method sleepMethod = stuClz.getDeclaredMethod("sleep");
        sleepMethod.setAccessible(true);
        sleepMethod.invoke(student)

 

posted @ 2018-10-28 23:07  程序员008  阅读(142)  评论(0)    收藏  举报