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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 凡延海 中级黑马   /  2012-5-20 19:46  /  1436 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class BTest {
public static void main(String []args)
{
  ReflectPoint pt1=new ReflectPoint(3,5);
  Field fy=pt1.getClass().getField("y");
  System.out.println(fy.get(pt1));
}


}
class ReflectPoint
{
  private int x;
  public int y;
   
public  ReflectPoint(int x,int y)
{
  super();
  this.x=x;
  this.y=y;
  
}
}
我按照视频调试代码,不过在编译的时候就是出错这一行Field fy=pt1.getClass().getField("y");出错,显示找不到符号,郁闷!!

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

9 个回复

倒序浏览
我复制你的代码运行完全没问题啊。
  1. import java.lang.reflect.Field;


  2. public class test {
  3. public static void main(String []args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException
  4. {
  5.   ReflectPoint pt1=new ReflectPoint(3,5);
  6.   Field fy=pt1.getClass().getField("y");
  7.   System.out.println(fy.get(pt1));
  8. }


  9. }
  10. class ReflectPoint
  11. {
  12.   private int x;
  13.   public int y;
  14.    
  15. public  ReflectPoint(int x,int y)
  16. {
  17.   super();
  18.   this.x=x;
  19.   this.y=y;
  20.   
  21. }
  22. }
复制代码
只加了抛出异常的代码
运行结果

未命名.jpg (18.77 KB, 下载次数: 21)

未命名.jpg

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
那就奇怪了,我的工具有问么,我在学习反射的时候,不论是Constructor还是Field 每次编译的时候都会报错,说找不到符号,我用的是JCreator编译的。
回复 使用道具 举报
      亲,不知道你在编译环境中的代码有没有加上头文件import java.lang.reflect.Field;
如果没有,那你所犯的错误也太低级了,呵呵,小心一点。
解决办法:1.加上头文件import java.lang.reflect.Field;
               2.main主函数的后面加上处理异常的代码  
回复 使用道具 举报
是的,呵呵犯了一个低级的错误,我没有import引入类,加上import java.lang.reflect.Field;就好了。我一直记得java自己会引入java.lang中的类,就疏忽了。自动引用应该是java.lang.*吧。
回复 使用道具 举报
1
没有导入包:import java.lang.reflect.Field;
2
没有try,catch
试下下面的代码
import java.lang.reflect.Field;

public class BTest {
         public static void main(String []args)
         {
          
           Field fy;
        try {
                ReflectPoint pt1=new ReflectPoint(3,5);
                fy = pt1.getClass().getField("y");
                try {
                        System.out.println(fy.get(pt1));
                } catch (IllegalArgumentException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IllegalAccessException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
        } catch (NoSuchFieldException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
        }
          
         }


         }
         class ReflectPoint
         {
           private int x;
           public int y;
             
        public  ReflectPoint(int x,int y)
         {
           super();
           this.x=x;
           this.y=y;
          
         }
         }
         
回复 使用道具 举报
嗯,又重新调试了一下,通过了,谢谢大家。
回复 使用道具 举报
亲,没导入包吧
回复 使用道具 举报
哈哈,竟忘了导包,以后还是用myEclipse编译工具它会自动提醒你,另外如果是初学的话还是建议用那种简单的
回复 使用道具 举报
嗯,以后要细心。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马