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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李明全 中级黑马   /  2015-4-26 21:52  /  345 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

|---定义:就是把java类中的各种成分映射成相应的java类,说白了就是获得一个类里面的成员
        |---获取字节码的方法:1,类名.class(System.class) 2,对象.getClass()  3,Class.forName("类名 比如java.util.Data")
        |---反射是为了实现(代码自己看):1,在运行时判断任意一个对象所属的类。2,在运行时构造任意一个类的对象。
                                3,在运行时判断任意一个类所具有的成员变量和方法。4,在运行时调用任意一个对象的方法
        |---反射与内省区别?
        反射可以操作各种不同的java类,那么内省只是通过反射来操作JavaBean的。JavaBean类里面操作的都是成员变量,都是通过setXXX和getXXX方法
来获取成员变量,这样的类用内省来操作会更简单。
        |---反射及暴力反射  ,获得私有方法代码(这里用到反射)
        暴力反射:类里面的变量私有了,通过普通的getField反射方法无法获得,只能通过getDeclaredField()获得
        代码:package day_7_15;
import java.lang.reflect.Field;
class ReflectPoint{
        private int x ,y;
        ReflectPoint(int x ,int y){
                this.x=x;
                this.y=y;
        }
}
public class ViolenceReflectDemo {
        public static void main(String[] args) throws Exception, Exception{
                ReflectPoint point = new ReflectPoint(3,5);
                //field类代表某个类中的成员变量,这里是私有变量只能通过暴力反射的方法获得,getDeclaredField()方法
                Field field = point.getClass().getDeclaredField("y");//得到了方法看不见方法,需要判断
                //通过方法看见了,但是拿不到
                field.setAccessible(true);
                //y这个还有变量y的变量类对象来获取对象里的y  ,拿到了变量
                System.out.println(field.get(point));
        }
}


3 个回复

倒序浏览
还没有看到呢
回复 使用道具 举报
还没学到这里。
回复 使用道具 举报
还没学到啊,好高深啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马