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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 兜兜转转 中级黑马   /  2013-9-2 10:18  /  1416 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 2013-9-3 11:01 编辑

问题:得到的Field对象是对应到类上面的成员变量,还是对应到对象上的成员变量?类只有一个,而该类的实例对象有多个,如果是与对象关联,哪关联的是哪个对象呢?所以字段fieldX 代表的是x的定义,而不是具体的x变量?

以上张孝祥老师PPT里面的原话,这个是什么意思?

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

7 个回复

倒序浏览
是类上的变量吧,应该在调用方法的时候进行关联的,比如Object get(Object obj)   传入一个关联对象
回复 使用道具 举报
薛淑凯 发表于 2013-9-2 10:49
是类上的变量吧,应该在调用方法的时候进行关联的,比如Object get(Object obj)   传入一个关联对象 ...

类加载的时候,如果没创建对象,这些变量就不在内存的啊,创建对象之后,对象在堆内存中存在,然后非静态的成员变量才会存在于堆中某个对象里。
回复 使用道具 举报
本帖最后由 静以修身 于 2013-9-2 11:48 编辑

得到的对象是类的组成部分,Filed类型的对象。首先通过反射获得类的Class对象,然后获得反射类的各个组成部分(你这里的是反射类的属性)。
clazz.getField("name");   //只能获取本类中公有的
clazz.getDeclaredFiled("name")  //获取本类,但包含私有
如果是与对象关联,具体关联哪个对象是由你自己指定的,该对象提供了两个方法get()和set()用于获取和设置由你指定的对象。性对于提前硬编码目标类来说大大提高了获取类对象的灵活性字段FieldX代表的是X的定义是指一个类的定义,即反射类的一个组成成分(也是一个类)的定义。而不是具体的X的变量是指不是具体类对象的X变量,比如有个对象Person p = null;该类有个变量X,你获取的X变量不是具体对象p的变量

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
兜兜转转 发表于 2013-9-2 11:06
类加载的时候,如果没创建对象,这些变量就不在内存的啊,创建对象之后,对象在堆内存中存在,然后非静态 ...

我是这么认为的。字节码文件,就是经过java编译器,编译过的一种文件,说白了就是二进制文件,只有在运行的时候才加载进内存,进而各种东西进堆内存,进栈内存,进方法区,那么可以想象通过,字节码.getFieled("X").获取自身的字段属性,跟它是否只能创建对象无关,因为是通过字节码直接调用本身的二进制文件查找字段的。不知道对不对啊,其实要是学会了底层调用,多看看虚拟机原理,应该还是很简单的问题。
回复 使用道具 举报
静以修身 发表于 2013-9-2 11:42
得到的对象是类的组成部分,Filed类型的对象。首先通过反射获得类的Class对象,然后获得反射类的各个组成部 ...

那到底是属于谁的呢?
是独立?
还是类的?
你已经说了不是对象的了。
回复 使用道具 举报
兜兜转转 发表于 2013-9-2 13:05
那到底是属于谁的呢?
是独立?
还是类的?

是类的,有一句话是这样说的:JAVA反射机制是在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有属性和方法。
希望能对你有用!
回复 使用道具 举报
你上面的字段fieldX 代表的是Class类中的成员属性字段,他现在和任何对象都无关系,在后面才建立连接。
public static void main(String[] agrs) throws Exception {
                Class c = Person.class;
                Field f = c.getDeclaredField("name");// 这个此时只是一个字段,他和任何Perspn对象都无关,在下面才和Person对象建立关系
                Person r = new Person();
                f.setAccessible(true);
                f.set(r, "张三");//字段和Person对象建立关系
                System.out.println(f.get(r));//这里也是建立了关系
        }
希望这些对你有帮助!

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