黑马程序员技术交流社区

标题: 反射这块东西真的很难理解! [打印本页]

作者: 562181817    时间: 2016-2-28 15:46
标题: 反射这块东西真的很难理解!
求一份详细点的笔记帮助复习 实在是不懂啊!
作者: 友人A    时间: 2016-2-28 15:46
我个人的理解,既然class文件是编译生成的二进制文件。也就是说按照平常,就单独给你一个class文件,你无法知道它原来的java文件里写的什么东西,比如类啊,属性啊,方法啊等等。
而通过反射,我们就可以知道一个class文件编译之前,里面的类名,属性名,方法名。不仅如此,它还能把它加载到内存里,创建class文件中的类的实例,并让你使用起来。
作者: 许鹏飞    时间: 2016-2-29 12:22
反射用于做框架的,如果不做框架基本用不上,至少你只需要明白如何反射构造,字段,方法即可!
作者: AlphaCC    时间: 2016-3-6 15:33
同求,对于反射的理解不是很透彻
作者: hard    时间: 2016-3-9 08:21
[code]public class ReflectEx {

    public static void main(String[] args)throws Exception {
        Class cls = Class.forName("org.dennisit.reflect.entity.User");
        Object obj = cls.newInstance();       //创建User的对象
        Field f = cls.getDeclaredField("test");    //获取test属性
        f.setAccessible(true);                    //打开私有属性test的访问权限
        f.set(obj, "zhangsan");                    //为test重新复制
        System.out.println(f.get(obj));            //获取obj的test属性值
        //根据方法名execute获取方法
        java.lang.reflect.Method m = cls.getMethod("execute", String.class, int.class);
        m.invoke(obj, "dennisit",23);            //调用execute方法
    }
}

当我们需要访问私有的属性,方法,字段,函数的时候,我们需要先“强暴它一下,setAccessiable(true)”
作者: gaoxiang933    时间: 2016-3-11 15:36
知道有种武功叫做斗转星移吗,反射和这个原理一样,你用A去打B,而B又反给了A,代码体现就是A文件生成了B文件,而B文件作用是为了使用A
作者: 朱小龙    时间: 2016-3-15 13:31
http://blog.csdn.net/zy_tiger/article/details/50769535
这个可以么?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2