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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

张育辉
1:什么是反射
                        java反射机制是在运行状态中,可以获取对象的成员(成员方法和成员属性),可以调用成员方法;
                2:获取字节码对象三种方式
                        1:可以通过对象.getClass();
                        2:类名.class;
                        3:Class.forName("全类名");
                3:通过字节码对象获取构造对象
                        1:getConstructors() 获取一个类中所有的公共的构造方法,返回Constructors数组
                        2:getConstructor((可以有参数,不传就是空参数)) 根据参数获取指定的公共的构造方法, 返回Constructor对象
                        3:getDeclaredConstructor((可以有参数,不传就是空参数))获取私有的
                                       
                4:通过字节码对象直接获取对象
                        获取对象,newInstance()空参newInstance()
                        Object obj =        class.newInstance()
                       
                5:获取类中成员变量
                        1:getField(); public修饰的
                        2:getDeclardField() 获取所有的成员属性包括私有
                                需要调用setAccessible(true)方法,告诉JVM我要暴力访问,让jvm不检查权限
                                实例:反射private属性执行流程
                                1. 获取person类字节码对象   Class cl = Class.forName("com.itheima.demo.Person");
                                2. 获取person对象                        Object person = cl.newInstance();
                                3. 通过getDeclaredField方法获取私有字段   Field f = cl.getDeclaredField("age");比如你要获取age私有属性
                                4. 通过setAccessible让jvm不检查权限    f.setAccessible(true);
                                5. 通过set方法设置对象为具体的值    f.set(person, 24);
                               
                6:获取成员方法
               
                        1:getMethod() 获取public修饰的成员方法 ,返回类型 Method对象,参数1是访问的方法名,参数2,是方法需要传的类型.class
                                                        调用方法  对象名.invoke() 参数1,对象名 参数2,你要传的参数
                                                       
                        2:getDeclaredMethod() 获取所有修饰的成员方法,格式:同上
                                                        需要调用 setAccessible(true)让jvm不检查权限
                                                        执行方法  对象名.invoke()        参数1,对象名 参数2,你要传的参数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马