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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 散人online 中级黑马   /  2013-2-2 11:46  /  1644 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Field fieldAge = p.getClass().getDeclaredField("age");
有个Person类,Person类中有个私有的age属性,
p为类Person中的实例对象.这是我根据视频讲解写的
但是有一点疑惑
得到Person类上私有的age字段
既然是得到Person类上的字段,
为什么是P.class(),而不是Person.class()?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

4 个回复

倒序浏览
我是这样理解的 你看有没有道理p.class() 根据他的实例找到获取他的类 而Person 就是类本身了获取不了类了
底层的代码 public final native Class<?> getClass();   

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
Person.class 木有括号。
为什么要从对象获取?因为如果你不知道类的名字呢?如果你现在只有一个对象,那你只能从对象获取,是吧?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
楼上的说得很对,其实Person.class 和 p.getClass() 都是指的同一个字节码文件

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
获取字节码有三种方式:
类名.class,例如,System.class
对象.getClass(),例如,new Date().getClass()
Class.forName("类名"),例如,Class.forName("java.util.Date");
如果是同一个类,在内存中只有一份字节码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马