复制代码
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException,
        InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {

        // T newInstance(Object... initargs):根据指定的构造方法创建对象

        // 获取Class对象
        Class<?> clazz = Class.forName("com.unit1.test.reflect.Dog");

        // 获取空参构造创建对象
        Constructor constructor = clazz.getConstructor();
        Dog dog = (Dog)constructor.newInstance();
        System.out.println(dog);

        // 获取有参构造创建对象
        Constructor declaredConstructor = clazz.getDeclaredConstructor(String.class, int.class);
        Dog dog1 = (Dog)declaredConstructor.newInstance("小花", 23);
        System.out.println(dog1);

        // 获取一个私有化的构造方法创建对象
        Constructor declaredConstructor1 = clazz.getDeclaredConstructor(String.class);
        // setAccessible(true):因为被private修饰的成员不能被外部使用,这时候需要临时取消访问检查
        declaredConstructor1.setAccessible(true);
        Dog dog2 = (Dog)declaredConstructor1.newInstance("大黄");
        System.out.println(dog2);
    }
复制代码
复制代码
public class Dog {

    private String name;
    private int age;

    public Dog() {}

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

    private Dog(String name) {
        this.name = name;
    }

    private Dog(int age) {
        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 void eat() {
        System.out.println("吃");
    }

    @Override
    public String toString() {
        return "Dog [name=" + name + ", age=" + age + "]";
    }

}
复制代码