听话,让我反射——如果早知道反射机制

目录

一、什么是反射?

二、获取Class对象

三、获取构造方法

四、获取成员变量

五、获取成员方法

六、暴力发射 


一、什么是反射?

        JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

二、获取Class对象

获取Class类对象
    1、使用类的class属性来获取,例:Objectr.class
    2、调用对象的getClass()方法,返回该对象所属类的Class对象
    3、使用Class类中的静态方法forName(String className) 该传入字符串参数为某个类的全路径,也就是完整包名的路径
    4、基本数据类型也可用.class方法获取Class对象的。

三、获取构造方法

获取构造方法的方法
   1、
 Constructor<?>[] getConstructors() 返回所有公共构造方法对象的数组
    2、Constructor<?>[] getDeclaredConstructors() 返回所有构造方法对象的数组
    3、Constructor<?> getConstructor(Class<?>...parameterTypes) 返回单个公共构造方法对象
    4、Constructor<?> getDeclaredConstructor(Class<?>...parameterTypes) 返回单个构造方法对象

四、获取成员变量

获取成员变量并使用
   1、 Field[] getFields() 返回一个包含Filed对象的数组,Filed对象反映该类所有可访问的公共变量
   2、Field[] getDeclaredFields() 返回一个包含Filed对象的数组,反映了该类声明的所有字段
   3、 getField(String name) 返回一个可访问的公共字段
   4、 getDeclaredField( String name) 返回一个字段
   5、 set(Object o, Object value) 给o对象赋值为value 

五、获取成员方法

 获取成员方法并使用
   1、 Method[] getMethods() 返还一个包含方法对象的数组,反映该类对象所有的公共方法,包括由类或接口声明的对象,以及从超类和超级接口继承来的类方法
   2、 Method[] getDeclaredMethods() 返还一个包含方法对象的数组,反映该类对象所有声明方法,不包含继承
   3、 Method getMethod(String name, Class<?>...parameterTypes) 返回一个声明的公共方法
   4、 Method gettDeclaredMethod(String name, Class<?>...parameterTypes) 返回一个声明的方法
  5、  Object invoke(Object  o,Object...args)在具有指定参数的指定对象上调用此方法对象表示的基础方法
        

六、暴力反射 

暴力反射
    setAccessible(boolean flag) 值为true ,取消访问检查
    这样就可以使用私有的字段了 

猜你喜欢

转载自blog.csdn.net/H445584704/article/details/121459796