Java 反射的常用方法介绍 - 获取类对象

104 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

对于反射来说,它的特性是在程序运行的过程中去获取一个类的所有的信息,比如说成员变量、成员方法、构造器、注解等等。在获得这些信息之后,结合已生成的对象,就可以进行一些变量的修改和方法调用。这里我们来介绍一下Java 中常用的反射方法。

反射中的常用方法介绍

在使用反射的时候,我们首先要明确一个事情,反射需要有一个标的,这个标的就是一个类。

使用反射,我们可以在程序运行的时候来获取这个类的所有信息。

首先我们给出一个类,这个类中包含私有属性、公有属性、公有方法、私有方法、构造方法,同时有父类,也实现了接口。根据这个类,我们来看一下如何使用反射来获取这些所有的信息。

package xxx.xxx.xxx.Student;

public class Student extends Person implements Behavior{
    private static int maxAge = 150;
 
    // private field
    private String name = "Jack";
    // public field
    public int age = 39;
    
    public Student() {
        System.out.println("non parameter construct method");
    }
 
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("age: " + age + " name: " + name);
    }
 
    // public method
    @Override
    public void doHomework(String title) {
        System.out.println(name + "'s homework is: " + title);
    }
 
    @Override
    public void playGame() {
        System.out.println(name+" plays game");
    }
 
    // private method
    private void cleanClassroom() {
        System.out.println(name + " is cleaning up classroom");
    }
 
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
 
    public String getAge() {
        return age;
    }
 
    public static int getMaxAge() {
        return maxAge;
    }
}

如何获取类的对象

然后,我们根据上面定义的那个类,来看一下如何获取类的对象。

获取类对象的方式一共有三种,我们分别来看一下。

第一种,根据类定义来获取类的对象。

(这里说的“类的对象”是指Class 对象,好好理解一下这个。【注意与class 关键字做区分】)

Class<?> clazz = Student.class;

第二种,根据类路径来获取类的对象

Class<?> clazz = Class.forName("xxx.xxx.xxx.Student");

第三种,根据实例类对象来获取类对象

Student student = new Student();
Class<?> clazz = student.getClass();

总结

这里根据自定义的一个类,来说明如何通过反射的api 来获取类对象。其中最常用的一种是第二种,读者需要牢记获取对象的这三种写法。