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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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;
                }
               
        }


4 个回复

倒序浏览
找到了
应该是构造函数没有public的原因。。。。
回复 使用道具 举报 1 0
赞一个   
回复 使用道具 举报
学习了,
回复 使用道具 举报
对于不是公共的方法可以使用暴力反射,getDeclaredConstructor,这样就可以获取了。并不是所有的方法都是公共的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马