一.概念
反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作。例如它允许一个java的类获取他所有的成员变量和方法并且显示出来。
Spring JavaBean 是 reflection 的实际应用之一;其通过 reflection 动态的载入并取得 Java 组件(类) 的属性。
二、通过Java反射查看类信息
1、如何获取Class对象?(三种方式)
StringBuilder builder = new StringBuilder();
Class class2 = builder.getClass();
Class class1 = StringBuilder.class;
Class class3 = Class.forName("com.app.Lettcode");
2、获取class对象的属性?
Field [] publicFields = class1.getFields(); // 获取公有属性
Field [] allFields = class1.getDeclaredFields(); // 获取所有属性
Field nameField = class1.getField("name"); // 获取指定属性
nameField .set("name","1");
3、获取class对象的方法?
Method [] publicMethods = class1.getMethods(); // 获取公有方法
Method [] allMethods = class1.getDeclaredMethods(); // 获取所有方法
Method method = class1.getMethod("getName", String.class); // 获取指定方法
4、获取对象构造函数?
Constructor constructor = class1.getConstructor();
Constructor constructor1 = class1.getConstructor(String.class);
三、通过Java反射生成并操作对象
1、如何生成类的实例对象?
Object object = class1.newInstance();
2、如何调用类的方法?
Method method = class1.getMethod("getName", String.class);
method.setAccessible(true);
Object returnObject = method.invoke(object, "1");
当通过Method的invoke()方法来调用对应的方法时,Java会要求程序必须有调用该方法的权限。如果程序确实需要调用某个对象的private方法,则可以先调用Method对象的如下方法。
setAccessible(boolean flag):将Method对象的acessible设置为指定的布尔值。值为true,指示该Method在使用时应该取消Java语言的访问权限检查;值为false,则知识该Method在使用时要实施Java语言的访问权限检查。