https://blog.youkuaiyun.com/u010445297/article/details/60967146
在计算机科学中,内省是指计算机程序在运行时(Run time)检查对象(Object)类型的一种能力,通常也可以称作运行时类型检查。 不应该将内省和反射混淆。相对于内省,反射更进一步,是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。
Method 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。
一个完整方法包含的属性有:
方法上使用的注解、方法的修饰符、方法上定义的泛型参数、方法的返回值、方法名称、方法参数(泛型、注解)、方法抛出的异常。
如何获取Method类对象
一共有4种方法,全部都在Class类中:
- getMethods(): 获得类的public类型的方法
- getMethod(String name, Class[] params): 获得类的特定方法,name参数指定方法的名字,params参数指定方法的参数类型
- getDeclaredMethods(): 获取类中所有的方法(public、protected、default、private)
- getDeclaredMethod(String name, Class[] params): 获得类的特定方法,name参数指定方法的名字,params参数指定方法的参数类型
package com.testReflect;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class MethodTest {
public static void main(String[] args) throws Exception {
//使用反射第一步:获取操作类MethodDemoFieldDemo所对应的Class对象
Class<?> cls = Class.forName("com.testReflect.MethodDemo");
//使用MethodDemo类的class对象生成 实例
Object obj = cls.newInstance();
//获取public int addResult(int addNum)方法
Method addMethod = cls.getMethod("addResult", new Class[]{int.class});
System.out.println("修饰符: " + Modifier.toString(addMethod.getModifiers()));
System.out.println("返回值: " + addMethod.getReturnType());
System.out.println("方法名称: " + addMethod.getName());
System.out.println("参数列表: " + addMethod.getParameterTypes());
int result = (int)addMethod.invoke(obj, 2);
System.out.println("调用addResult后的运行结果:" + result);
System.out.println("--------------------------------");
//获取public String toString() 方法
Method toStringMethod = cls.getMethod("toString", new Class[]{});
System.out.println("修饰符: " + Modifier.toString(toStringMethod.getModifiers()));
System.out.println("返回值: " + toStringMethod.getReturnType());
System.out.println("方法名称: " + toStringMethod.getName());
System.out.println("参数列表: " + toStringMethod.getParameterTypes());
String msg = (String)toStringMethod.invoke(obj);
System.out.println("调用toString后的运行结果:" + msg);
}
}
dalao的文章:https://blog.youkuaiyun.com/sinat_38259539/article/details/71799078
类的正常加载过程
反射的作用
通过反射获取构造方法并使用
获取成员变量并调用
获取成员方法并调用
反射main方法
反射方法的其它使用之---通过反射运行配置文件内容
反射方法的其它使用之---通过反射越过泛型检查