首页 > 编程语言 > 详细

java中的反射学习

时间:2020-03-12 00:22:28      阅读:89      评论:0      收藏:0      [点我收藏+]

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(对象,参数)

技术分享图片

 

java中的反射学习

原文:https://www.cnblogs.com/yamiya/p/12466490.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!