黑马程序员技术交流社区

标题: 关于构造方法的一点问题 [打印本页]

作者: 王桂丽    时间: 2012-9-25 16:08
标题: 关于构造方法的一点问题
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

作者: 冯培军    时间: 2012-9-25 17:24
编译没问题,运行就出错了,
首先,第九行报出: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);   //测试需要  我随便传的
楼主再试试。。。
作者: 王桂丽    时间: 2012-9-25 20:31
冯培军 发表于 2012-9-25 17:24
编译没问题,运行就出错了,
首先,第九行报出:Exception in thread "main" java.lang.NoSuchMethodExcept ...

谢谢,已解决!




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