反射从入门到精通

本文主要讲解反射的使用,主要讲解反射获取类的构造方法,成员变量,成员方法的几种方式

应用场景:在我看来目前可以用在参数校验,动态代理,现在代理一般都是直接用aop,很少有需求自己做的

1.获取构造函数

 1.获取所有公共构造函数       
Constructor[] constructors = aClass.getConstructors();

2.暴力反射获取所有的构造函数
Constructor[] declaredConstructors = aClass.getDeclaredConstructors();
        
        
3.根据参数类型获取所有的构造函数
Constructor declaredConstructor = aClass.getDeclaredConstructor(String.class);

2.获取成员方法以及调用成员方法

       1.获取成员方法的几种方式
        Method[] declaredMethods = aClass.getDeclaredMethods();
        Method[] methods = aClass.getMethods();

        Method method= aClass.getMethod("方法名",参数类型.class)

       2.调用成员方法
        Object ds = method.invoke(调用的对象, 方法的参数值);
       3.调用私有方法
        //跳过检查
        method.setAccessible(true);
        Object ds = method.invoke(调用的对象, 方法的参数值);

3.获取成员变量和变量值,以及给变量赋值

       1.获取参数的几种方式 
       Field[] fields = aClass.getFields();
        Field[] declaredFields1 = aClass.getDeclaredFields();
        Field 参数名 = aClass.getField("参数名");
       2.获取参数值的方法
         (一)先获取Field对象
                  Field field = aClass.getField("参数名");
           (二)   
         field.get(要获取的对象) //这样就可以拿到,可以对具体的类型就行强转
       3.给参数赋值
       declaredField.set(赋值的对象,要赋的值);

不管哪一个成员参数都有一个共同特点,如果是公共参数,那么直接操作即可,如果不是的话,操作之前最好是设置跳过检查   eg:     method.setAccessible(true);

你可能感兴趣的:(java,java,前端,javascript)