1. 反射机制:在程序运行期动态获取其类型信息的机制。
2. java.lang.Class:代表正在运行的类和接口的类型信息对象。
3. 获取 Class 对象的方式:
- 通过 Object 类提供的 Class getClass()方法。
Integer integer = Integer.valueOF(12);
Class clazz = integer.getClass(); - 通过 Class 类提供的静态方法 forName(String 类名)来获取。
Class clazz = Class.forName("java.lang.Integer"); - 通过类的静态属性 class 也可以获取: Class clazz = Integer.class;
4. 通过反射获取某个类型的属性、方法、构造方法,父类和实现的接口。
-
获取类或接口的属性信息:用 java.lang.reflect.Field 代表。
public Field[] getFields(); 返回一个包含公有字段对应的 Field 对象数组
public Field getField(String name) throws NoSuchFieldException, SecurityException; 获取指定名称的公有字段对应的 Field 对象
public Field[] getDeclaredFields() throws SecurityException 返回一个包含的所有字段对应的 Field 对象数组
public Field getDeclaredField(String name) throws NoSuchFieldException, SecurityException; -
获取类或接口的方法:用 java.lang.reflect.Method 代表。
public Method[] getMethods() throws SecurityException; 返回一个包含公有 Method 对象的数组
public Method getMethod(String name, Class... parameterTypes) throws NoSuchMethodException, SecurityException
返回指定方法名和指定参数信息的 Method 对象。 -
获取类的构造方法:用 java.lang.reflect.Constructor 代表。
public Constructor[] getConstructors() throws SecurityException
public Constructor getConstructor(Class... parameterTypes) throws NoSuchMethodException, SecurityException -
获取方法的参数类型和返回值类型:调用 Method 类提供的对应方法。
public Class[] getParameterTypes(); 按照声明顺序返回 Class 对象的数组
public Class getReturnType();
5. 通过反射来创建该类型的对象:通过 Class 提供的 newInstance()方法调用默认的构造方法来创建该类型的一个对象。
Object obj = Class.forName("java.util.Date").newInstance();
6. 通过反射访问某个对象的属性或方法:
Field field = clazz.getDeclaredField("属性名"); //访问属性
field.setAccessible(true); //取消 Java 语言访问检查
Object obj = field.get(该类型的某个对象); //获取指定对象上该属性的值
field.set(该类型的某个对象, Object 值); //将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
Method method = clazz.getDeclaredMethod("方法名", 参数类型信息); //访问指定方法
method.setAssessible(true); //取消Java语言访问检查
Object obj = method.invoke(Object 该类型的某个对象, Object... 实参列表); //对带有指定参数的指定对象调用由此 Method对象表示的底层方法
7. 通过反射调用带参的构造方法比较麻烦。很多应用到反射技术的高级框架都要求你的类提供一个不带参数的构造方法。
大多数的高级框架的核心技术都是:XML 做配置,并解析,然后用反射来创建对象。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于