我们正常初始化如User user=new User(),这样的方式为正射,那么有时候无法使用正常的方式进行初始化,就可以用反射的方式。
反射由于对系统的资源占用较大,所以在能不使用就不使用。
例子:
首先创建一个对象类User
@Data @AllArgsConstructor @NoArgsConstructor public class User implements Serializable { private int id; private int age; private String name; @Override public String toString() { return "User{" + "id=" + id + ", age=" + age + ", name='" + name + '\'' + '}'; } }
然后创建一个类用反射的方式进行
var user = Class.forName("cn.chenxiejia.User"); //user.setName("张三"); var setage = user.getMethod("setAge", int.class); var setid = user.getMethod("setId", int.class); var setname = user.getMethod("setName", String.class);//获取setName方法 //new User();实例化一个对象 var co = user.getConstructor(); var o = co.newInstance(); //传入参数 setage.invoke(o, 18); setname.invoke(o, "张三"); setid.invoke(o, 1); System.out.println(o);
结果如图: