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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

乔海伦

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 乔海伦 初级黑马   /  2014-12-26 21:46  /  3020 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
package com.itheima;
public class Person{
        private String name;
        private  int  age;
        Person(){
               
        }
        Person(String name,int age){
                super();
                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;
        }
}
package com.itheima;
import java.lang.reflect.*;

public class Test7 {
        public static void main(String[] args){
                try{
                        //创建Person类字节码对象  
            Class<Person> c = Person.class;
            System.out.println(c.getName());

            //通过字节码得到Person的有参构造函数,创建它的实例对象,并进行初始化  
            Person person = c.getConstructor(String.class, int.class).newInstance("zhangsan",25);  

            //使用反射获得名为setName的方法,并给这个方法传递参数进行变量赋值  
            Method setNameMethod = c.getMethod("setName", String.class);  
            setNameMethod.invoke(person, "lisi");  

            //获取名为“age”的属性,并用暴力反射对该字段进行设置。  
            Field fieldAge = c.getDeclaredField("age");  
            //取消fieldAge字段的权限检查  
            fieldAge.setAccessible(true);  
            //把person对象的fieldAge字段值设置为30  
            fieldAge.set(person, 30);  

            //5、打印name和age的值  
            System.out.println("name=" + person.getName());  
            System.out.println("age=" + person.getAge());  
                }
                catch(Exception e){
                        e.printStackTrace();
                }
               
        }
       
}


很郁闷!为什么总出现这种问题,各位大神!!
java.lang.NoSuchMethodException: com.itheima.Person.<init>(java.lang.String, int)
        at java.lang.Class.getConstructor0(Class.java:2706)
        at java.lang.Class.getConstructor(Class.java:1657)
        at com.itheima.Test7.main(Test7.java:18);


最佳答案

查看完整内容

你的Person类中的构造函数前面要加上public,这样才能调用构造函数的。

8 个回复

倒序浏览
你的Person类中的构造函数前面要加上public,这样才能调用构造函数的。
回复 使用道具 举报
各位大神,忽略忽略!!
回复 使用道具 举报
moto风暴 发表于 2014-12-27 10:59
你的Person类中的构造函数前面要加上public,这样才能调用构造函数的。

谢谢,后知后觉了!!!!:D
回复 使用道具 举报
小平 来自手机 中级黑马 2015-1-1 17:30:45
报纸
Class反射基础
回复 使用道具 举报
构造函数默认情况下,权限修饰符为private,因为你解剖这个构造器的时候,使用的是得到public类型的构造方法,所以会抛出找不到这个方法的异常,可以使用getDeclaredConstructor();或者将person类中带参构造函数加上public。
回复 使用道具 举报
person的权限不够。在前面加个public
回复 使用道具 举报
怒赞一个,
回复 使用道具 举报
赞一个我。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马