你Person类中的构造函数,要声明为public才行
因为getConstructor(Class[] params) 和getConstructors()仅仅可以获取到public的构造函数。
或者你在获取构造函数的时候选用getDeclaredConstructors(),这个方法则可以获取到所有的构造函数。
但是调用这个方法的话,要注意安全检查,如果获取的构造函数是public或者是默认权限(即friendly),则不用setAccessible(true)也能正常运行
如果获取的构造函数是private的话,就会抛出java.lang.IllegalAccessException
看看下面的简化代码- package cn.itcast;
- import java.lang.reflect.Constructor;
- class Constructortest {
- public static void main(String[] args) throws InstantiationException, Exception {
- // TODO Auto-generated method stub
- Constructor<Person> constructor=Person.class.getDeclaredConstructor(String.class,int.class);
- constructor.setAccessible(true);//private权限的构造函数需要安全检查
- Person p=constructor.newInstance("zhangsan",24);
- System.out.println(p);
-
- }
- }
- class Person{
- private String name;
- private int age;
- private Person(String name,int age){ //这里构造函数声明为private
- this.name=name;
- this.age=age;
- }
-
- @Override
- public String toString(){
- return name+"==="+age;
-
- }
- }
复制代码 |