Java通过反射获取带参数构造方法并使用

package com.sanmao10;
import java.lang.reflect.Constructor;
public class test2 {
    /**
     * ###27.05_反射(通过反射获取带参构造方法并使用)
     * Constructor
     * Class类的newInstance()方法是使用该类无参的构造函数创建对象, 如果一个类没有无参的构造函数,
     * 就不能这样创建了,可以调用Class类的getConstructor(String.class,int.class)
     * 方法获取一个指定的构造函数然后再调用Constructor类的newInstance("张三",20)方法创建对象*/
    public static void main(String[] args) throws Exception{
        Class clazz=Class.forName("com.sanmao10.Person");
//        Person p=(Person)clazz.newInstance();    //通过无参构造创建对象
//        p.say();
        Constructor c=clazz.getConstructor(String.class,int.class);//获取有参构造
        Person p=(Person) c.newInstance("sanmao",12);    //通过有参构造创建对象
        p.say();
    }
}



package com.sanmao10;
public class Person {
    private String name;
    private int age;

//    public Person() {
//    }

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

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Person person = (Person) o;

        if (age != person.age) return false;
        return name != null ? name.equals(person.name) : person.name == null;

    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + age;
        return result;
    }

    @Override
    public String toString() {
        return super.toString();
    }
    public void say(){
        System.out.println(name+"..."+age);
    }
    public void papapa(){
        System.out.println(name+"   pa pa pa");
    }
}

你可能感兴趣的:(java,函数,对象)