📜  Java中的类 getDeclaredConstructor() 方法和示例(1)

📅  最后修改于: 2023-12-03 15:02:03.081000             🧑  作者: Mango

Java中的类 getDeclaredConstructor() 方法和示例

在Java中,getDeclaredConstructor() 方法是用于获取指定类的所有声明的构造方法。它返回一个Constructor对象,可以用于实例化类的新对象。

语法

getDeclaredConstructor(Class<?>... parameterTypes)

参数 parameterTypes 是一个可变参数,用于指定构造方法的参数类型。

返回值

返回指定类中声明的构造方法的Constructor对象。

示例
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class MyClass {
    private String name;
    private int age;

    public MyClass() {
    }

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

    public static void main(String[] args) {
        try {
            // 获取不带参数的构造方法
            Constructor<?> constructor1 = MyClass.class.getDeclaredConstructor();

            // 获取带参数的构造方法
            Constructor<?> constructor2 = MyClass.class.getDeclaredConstructor(String.class, int.class);

            // 使用不带参数的构造方法实例化对象
            MyClass obj1 = (MyClass) constructor1.newInstance();

            // 使用带参数的构造方法实例化对象
            MyClass obj2 = (MyClass) constructor2.newInstance("John Doe", 30);

            System.out.println("obj1 name: " + obj1.getName()); // 输出: obj1 name:
            System.out.println("obj1 age: " + obj1.getAge());   // 输出: obj1 age: 0

            System.out.println("obj2 name: " + obj2.getName()); // 输出: obj2 name: John Doe
            System.out.println("obj2 age: " + obj2.getAge());   // 输出: obj2 age: 30

        } catch (NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) {
            e.printStackTrace();
        }
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

上述示例中,定义了一个 MyClass 类,包含了两个构造方法和相应的成员变量。main 方法中使用 getDeclaredConstructor() 方法获取了指定类的构造方法,然后使用 newInstance() 方法实例化对象。

通过输出结果可以看到,使用不带参数的构造方法实例化的对象的成员变量保持了其默认值,而使用带参数的构造方法实例化的对象的成员变量被正确地初始化为指定的值。

注意:getDeclaredConstructor() 方法可以获取包括私有(private)构造方法在内的所有构造方法。如果要获取公共(public)构造方法,请使用 getConstructor() 方法。