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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 562181817 中级黑马   /  2016-2-28 15:46  /  3174 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

2黑马币
求一份详细点的笔记帮助复习 实在是不懂啊!

最佳答案

查看完整内容

我个人的理解,既然class文件是编译生成的二进制文件。也就是说按照平常,就单独给你一个class文件,你无法知道它原来的java文件里写的什么东西,比如类啊,属性啊,方法啊等等。 而通过反射,我们就可以知道一个class文件编译之前,里面的类名,属性名,方法名。不仅如此,它还能把它加载到内存里,创建class文件中的类的实例,并让你使用起来。 ...

7 个回复

倒序浏览
我个人的理解,既然class文件是编译生成的二进制文件。也就是说按照平常,就单独给你一个class文件,你无法知道它原来的java文件里写的什么东西,比如类啊,属性啊,方法啊等等。
而通过反射,我们就可以知道一个class文件编译之前,里面的类名,属性名,方法名。不仅如此,它还能把它加载到内存里,创建class文件中的类的实例,并让你使用起来。

点评

听起来理解了反射的机制了,多谢  发表于 2016-3-10 00:18
回复 使用道具 举报
反射用于做框架的,如果不做框架基本用不上,至少你只需要明白如何反射构造,字段,方法即可!

评分

参与人数 1黑马币 +1 收起 理由
562181817 + 1 赞一个!

查看全部评分

回复 使用道具 举报
同求,对于反射的理解不是很透彻
回复 使用道具 举报
[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)”
回复 使用道具 举报
知道有种武功叫做斗转星移吗,反射和这个原理一样,你用A去打B,而B又反给了A,代码体现就是A文件生成了B文件,而B文件作用是为了使用A

评分

参与人数 1黑马币 +1 收起 理由
562181817 + 1 赞一个!

查看全部评分

回复 使用道具 举报
http://blog.csdn.net/zy_tiger/article/details/50769535
这个可以么?

评分

参与人数 1黑马币 +1 收起 理由
562181817 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马