美文网首页我爱编程
java的反射机制

java的反射机制

作者: twenty_one | 来源:发表于2018-06-21 09:56 被阅读0次

    最近在学习spring框架的原理,其中运用到了大量的反射机制(反射是框架设计的灵魂),下面就介绍下关于反射机制的使用。

    一、获取Class对象(三种方式,其中第三种最为常用)

    1、Object.getClass()方法;

    2、通过任何数据类型(包括基本数据类型)都含有的静态属性class;

    3、通过Class的静态方法forName(String className),className为带包名的路径,即包名.类名;

    二、通过反射机制获取构造方法并使用

    主要方法:

    1、public Constructors[] getConstructors(),获取所有公有的构造方法;

    2、public Constructors[] getDeclaredConstructors(),获取所有的构造方法(包括public、protected、default、private);

    3、public Constructor getConstructor(Class<?>... parameterTypes),获取某个公有的构造方法;

    4、public Constructor getDeclaredConstructor(Class parameterType),获取某个构造方法,可能是公有、保护、默认、私有;

    5、调用构造方法,使用constructor的public Object newInstance(Object...initargs);

    6、通过constructor的setAccessibale(true)来解除私有限定,从而访问私有的构造方法;

    三、通过反射机制获取字段并使用

    1、getFields(),获取所有公有字段;

    2、getDeclaredFields(),获取所有的字段,包括公有、私有、保护、默认;

    3、getField(String fieldName),获取某个公有字段;

    4、getDeclaredField(String fieldName),获取某个字段,包括公有、私有、保护、默认;

    5、通过field的public void set(Object obj,Object value)方法设置字段值,其中obj为要设置字段值所在对象,value为所要设置的字段值;

    5、通过field的setAccessible(ture)方法,解除私有限定,从而访问私有字段;

    四、通过反射机制获取方法并调用

    1、getMethods(),获取所有的公有方法;

    2、getDecalaredMethods(),获取所有方法,包括公有、私有、默认、保护;

    3、getMethod(String methodName,Class<?>... parameterType),获取某个公有方法;

    4、getDecalaredMethod(String methodName,Class<?>... parameterTypes),获取某个方法,包括公有、私有、保护、默认;

    5、通过method的public Object invoke(Object obj,Object... params)调用某个方法,其中obj为需要调用方法所在对象,params为调用方法是所传入的参数;

    6、通过method的setAccessible(true),解除私有限定,从而调用私有方法;

    7、通过反射机制调用main方法:

    ①、Method mainMethod = clazz.getMethod("main",String[].class);

    ②、mainMethod.invoke(clazz.getConstructor().newInstance(),new String[]{});

    五、通过反射越过泛型检查

    1、问题描述:向有一个String泛型的集合中添加一个Integer类型的值

    2、List<String> list = new ArrayList<String>();

    3、Class clazz = list.getClass();

    4、Method addMethod = clazz.getMethod("add",Object.class);

    5、addMethod.invoke(list,100);

    PS:此篇文章参考了CSDN一博主关于java反射机制的博客,进行了精简提炼;附上传送门Java基础之—反射(非常重要) - CSDN博客

    相关文章

      网友评论

        本文标题:java的反射机制

        本文链接:https://www.haomeiwen.com/subject/xinfyftx.html