黑马程序员技术交流社区

标题: 反射方面问题,我实在是不知道为什么提示没有方法错误 [打印本页]

作者: z13561291    时间: 2015-11-27 11:34
标题: 反射方面问题,我实在是不知道为什么提示没有方法错误
public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, NoSuchFieldException {
                //获取Class字节码
                Class<Person> c = Person.class;
                 //调用构造函数创建对象
                Person p = c.getConstructor(String.class,int.class).newInstance("zhangsan",20);
                //获取方法设置姓名
                Method m = c.getMethod("setName", String.class);
                 //设置姓名为lisi
                m.invoke(p, "lisi");
               //  获取年龄属性
                Field f = c.getDeclaredField("age");
                //取消权限
                f.setAccessible(true);
                //设置年龄
                f.set(p, 25);
                System.out.println(p);
        }
}
        class Person{
                private String name;
                private int age;
                Person(){}
                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;
                }
               
        }



作者: z13561291    时间: 2015-11-27 12:16
找到了
应该是构造函数没有public的原因。。。。
作者: 小布丁当    时间: 2015-11-27 22:06
赞一个   
作者: Little_jie    时间: 2015-11-28 08:39
学习了,
作者: yuhongzhen    时间: 2015-11-28 09:50
对于不是公共的方法可以使用暴力反射,getDeclaredConstructor,这样就可以获取了。并不是所有的方法都是公共的。




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