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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜成龙 中级黑马   /  2013-10-17 12:44  /  1059 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜成龙 于 2013-10-17 16:05 编辑
  1. package cn.itcast.day1;

  2. public class Person {
  3. int x;
  4. int y;
  5. public Person(int x, int y) {

  6. this.x = x;
  7. this.y = y;
  8. }


  9. }
复制代码
  1. package cn.itcast.day1;

  2. import java.lang.reflect.Field;

  3. public class Demo {

  4. public static void main(String[] args)throws Exception {
  5. Person p=new Person(3,5);
  6. Field fy=p.getClass().getField("x");
  7. System.out.println(fy.get(p));
  8. }

复制代码
我运行主函数的时候,却显示:
Exception in thread "main" java.lang.NoSuchFieldException: x
at java.lang.Class.getField(Class.java:1520)
at cn.itcast.day1.Demo.main(Demo.java:9)
我上面的程序明明是按老师讲的写的啊,怎么就不对了呢?还望大家指教一下,谢谢!


4 个回复

倒序浏览
你的person 类里没有getField方法啊:P
回复 使用道具 举报
Field fy=p.getClass().getField("x");这句话的问题,getField方法只能通过反射得到公共成员字段。要使用Field fy = p.getClass().getDeclaredField("x");才能得所有字段。
回复 使用道具 举报
本帖最后由 赖波 于 2013-10-17 13:37 编辑

2楼正解,和我想得一样

因你的用法是取public 成员属性,get.Field();x这不是公有的

改成成如下getField()变成getDeclaredField()方法。这是获取不是公有成员的方法
接着再加个fy.setAccessible(true);这里是设成能读值,老师的暴力访问。

评分

参与人数 1技术分 +1 收起 理由
To + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
To 金牌黑马 2013-10-17 13:56:44
报纸
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马