本文已参与「新人创作礼」活动,一起开启掘金创作之路。
对于反射来说,它的特性是在程序运行的过程中去获取一个类的所有的信息,比如说成员变量、成员方法、构造器、注解等等。在获得这些信息之后,结合已生成的对象,就可以进行一些变量的修改和方法调用。这里我们来介绍一下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 来获取类对象。其中最常用的一种是第二种,读者需要牢记获取对象的这三种写法。