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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王桂丽 中级黑马   /  2012-9-25 16:08  /  1511 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.lang.reflect.*;
import java.io.*;
class ReflectPointTest
{
public static void main(String[] args) throws Exception
{
  //System.out.println("Hello World!");
  //Constructor需要导入java.lang.reflect.*这个包,获取构造方法
  Constructor constructor=ReflectPoint.class.getConstructor(int.class,int.class);
  //新建对象并赋值
  ReflectPoint reflectpoint=(ReflectPoint)constructor.newInstance();
  System.out.println(reflectpoint);
  //获取x字段值
  Field fieldX=reflectpoint.getClass().getField("x");
  //打印x的值
  System.out.println(fieldX.get(reflectpoint));
  //获取y字段的值
  Field fieldY=reflectpoint.getClass().getDeclaredField("y");
  //打印y的值
  fieldY.setAccessible(true);
  System.out.println(fieldY.get(reflectpoint));
  
}
}
class ReflectPoint
{
public int x;
public int y;
ReflectPoint(int x,int y)
{
  this.x=x;
  this.y=y;
}
}



疑问:明明参数为两个参数为int的构造函数,为何运行时出错?

未命名.jpg (29.95 KB, 下载次数: 23)

未命名.jpg

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
编译没问题,运行就出错了,
首先,第九行报出:Exception in thread "main" java.lang.NoSuchMethodException:   
先看你下面定义的构造函数 ReflectPoint(int x,int y) ,要对其设定访问权限为public  才能被访问。
加上public后,在运行,报出:Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments  ,
问题出在 :ReflectPoint reflectpoint=(ReflectPoint)constructor.newInstance();   //没有传参
修改为 ReflectPoint reflectpoint=(ReflectPoint)constructor.newInstance(3,5);   //测试需要  我随便传的
楼主再试试。。。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
冯培军 发表于 2012-9-25 17:24
编译没问题,运行就出错了,
首先,第九行报出:Exception in thread "main" java.lang.NoSuchMethodExcept ...

谢谢,已解决!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马