一.反射是什么
在运行状态中,对于任意一个类,都能知道这个类中的所有属性和方法。对于任意一个对象,都能调用它的任意一个方法和属性。这种动态获取的信息以及动态调用对象的方法的功能称为Java的反射机制。
所以通俗地说,反射就是在运行时,只要知道要操作的类是什么,就可以获取类的完整构造和调用对应的方法。
二.反射的使用
一般使用一个类,我们都是知道这个类,可以直接通过new创建对象来使用。
而反射则是不知道这个类,不能用new创建对象的情况下,使用反射的API来调用该类的属性或方法。
下面是一个简单的例子。
public class User { private String name; //get set... }
public class DemoApplication { public static void main(String[] args) throws Exception { //正常情况下,创建类来调用 User user = new User(); user.setName("jade"); System.out.println("name:" + user.getName()); //使用反射来调用 Class cls = Class.forName("com.example.demo.model.User"); Constructor userConstructor = cls.getConstructor(); Object userObj = userConstructor.newInstance(); Method setNameMethod = cls.getMethod("setName", String.class); setNameMethod.invoke(userObj,"sam"); Method getNameMethod = cls.getMethod("getName"); System.out.println("name:" + getNameMethod.invoke(userObj)); } }
我们是通过反射使用set方法来传值,然后用反射使用get方法来获取值。上面运行的结果是:
name:jade
name:sam
使用反射获取对象的步骤:
1.获取类的Class实例对象。
Class cls = Class.forName("com.example.demo.model.User");
2.根据Class对象获取Constructor对象。
Constructor userConstructor = cls.getConstructor();
3.使用Constructor对象的newInstance方法获取反射类对象。
Object userObj = userConstructor.newInstance();
调用对象中的方法步骤:
1.获取方法的Method对象。
Method setNameMethod = cls.getMethod("setName", String.class);
2.利用invoke调用方法。
setNameMethod.invoke(userObj,"sam");
这样就是反射的基本使用方式。