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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙万利 中级黑马   /  2012-12-4 10:32  /  1154 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

目的:通过反射获得Person类得构造函数,进而获得一个Person的实例

不过下面代码报出了错误 ;请指点迷津

package com.itheima;
import java.lang.reflect.*;
class Person
{
private String name;
private int age;

Person(String name,int age)
{
  this.name = name;
  this.age = age;
}

public String getName() {
  return name;
}
public void setName(String name) {
  this.name = name;
}
public int getAge() {
  return age;
}
public void setAge(int age) {
  this.age = age;
}

}
public class PersonDemo {

public static void main(String[] args) throws Exception {
  
  
  Constructor constructor = Person.class.getConstructor(String.class,int.class);
  
  Person person = (Person)constructor.newInstance(new Person("zhangsan",25));
  
  System.out.println(person.getName()+":"+person.getAge());
}
}

TT截图未命名.jpg (18.87 KB, 下载次数: 28)

TT截图未命名.jpg

评分

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

查看全部评分

3 个回复

倒序浏览
Person person = (Person)constructor.newInstance(new Person("zhangsan",25));这里你还用什么new Person!!!!

点评

还是getConstructor只能返回public函数,你需要将构造函数改为public报的异常。  发表于 2012-12-4 11:32
这个就是java.lang.NoSuchMethodException(没有这种方法异常)原因吗?  发表于 2012-12-4 11:28
对,这里直接要传递两个参数就行的,new Person已经就是一个对象了,没有传递一个对象的构造器  发表于 2012-12-4 10:59

评分

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

查看全部评分

回复 使用道具 举报
两个问题:
1.getConstructor只能返回public函数,你需要将构造函数改为public。
2..newInstance传入参数错误。
Person person = (Person)constructor.newInstance("zhangsan",25);

点评

也可以用这个获取非公有的构造方法:getDeclaredConstructor  发表于 2012-12-4 11:20

评分

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

查看全部评分

回复 使用道具 举报
谢谢大家,问题解决了; 拜谢了;
长进了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马