java中的反射学习

java被称为准动态语言很大一部分是因为java的反射机制。

运行程序,要经历编译成class文件,然后被类加载器加载,经过一系列操作才能被JVM运行,在被类加载器加载时会生产一个Class对象,里面有该类的参数,方法,构造器等信息。

我们可以通过获取这个Class对象来获取里面的信息,并且一个类只会有一个Class对象

1、获取Class对象的方式有三种

public class Student {

    private String name;
    private int age;
    private String sex;

    public Student() {
    }

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

    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 String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

 

1)通过对象.class的方式

2)通过实例化对象然后调用getClass方法

3)通过Class.forName()的方法

我们打印这三个studentClass的hashcode验证下是否是同一个Class对象:

2、获取构造方法

我们可以通过getConstructors方法来获取公共的构造方法,如果要获取私有的需要使用getDeclaredConstructors这个方法。

获取单个构造方法可以使用getConstructor这个方法,同理getDeclaredConstructor。

我们使用newInstance方法来创建对象。

无参:

 

有参:

私有的构造方法是无法被访问的我们要使用setAccessible(true);来使得能够正常被访问。

3、获取成员变量和使用

和获取构造方法相同我们使用getFields()和getDeclaredFields()方法来获取。

使用Field里面的set方法设置成员变量

 

4、获取成员方法和使用

和获取成员变量一样,获取成员方法我们使用

我们用反射使用成员方法时,使用invoke方法来使用,invoke(对象,参数)

 

posted @ 2020-03-11 23:39  yamiya  阅读(176)  评论(0编辑  收藏  举报