反射的简单理解

188 阅读1分钟

反射的简单理解

作用:利用反射可以程序运行时动态访问和修改任何类的行为和状态。反射最重要的用途就是开发各种通用框架.

过程:

1、获取该线程堆栈转储的堆栈跟踪元素数组(根据网上说法 new Throwable().getStackTrace() 比 Thread.currentThread().getStackTrace() 性能好些)

Thread.currentThread().getStackTrace()[?] ,?表示第几层调用方法,该方法后还可以.(),一般有

方法名:Thread.currentThread().getStackTrace()[?].getMethodName()    //常用
    当?=0时,它为getStackTrace
    当?=1时,它为当前方法方法名  
    当?=2时,它为当前方法的上层方法
    ....  以此类推
    
类名及路径:Thread.currentThread().getStackTrace()[?].getClassName()

文件名:Thread.currentThread().getStackTrace()[?].getFileName()

执行行数:Thread.currentThread().getStackTrace()[?].getLineNumber()

2、利用hutool反射工具类获取该方法名的方法

ReflectUtil.getMethod(Class clazz, String methodName, Class... paramTypes)

--》clazz======该方法所在的类

--》methodName=======方法名

--》paramTypes=======该方法的参数类型(如:int.class,String.class等等)

获取某个类的所有public方法:Method[] methods = ReflectUtil.getMethods(类.class)
获取某个类指定的方法:Method method = ReflectUtil.getMethod(类.class,"方法名") 
获取构造对象:ReflectUtil.newInstance(类.class)      

3、调用method代表的方法

Method.invoke(Object obj, Object... args)

--》obj=======该方法为静态方式时,填null;非静态方法时,填 类.class.newInstance()

--》args======方法实参