黑马程序员技术交流社区

标题: 大家帮忙看下这个程序问题出在哪? [打印本页]

作者: 杜成龙    时间: 2013-10-17 12:44
标题: 大家帮忙看下这个程序问题出在哪?
本帖最后由 杜成龙 于 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)
我上面的程序明明是按老师讲的写的啊,怎么就不对了呢?还望大家指教一下,谢谢!



作者: 逆流    时间: 2013-10-17 12:50
你的person 类里没有getField方法啊:P
作者: 赖波    时间: 2013-10-17 13:35
本帖最后由 赖波 于 2013-10-17 13:37 编辑

2楼正解,和我想得一样

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

改成成如下getField()变成getDeclaredField()方法。这是获取不是公有成员的方法
接着再加个fy.setAccessible(true);这里是设成能读值,老师的暴力访问。
作者: To    时间: 2013-10-17 13:56
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html




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