美文网首页
Java-Reflection

Java-Reflection

作者: jiangmo | 来源:发表于2018-04-12 11:55 被阅读10次

    概念

    主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义

    反射机制:所谓的反射机制就是java语言在运行时拥有一项自观的能力。通过这种能力可以彻底的了解自身的情况为下一步的动作做准备。

    Java的反射机制的实现要借助于4个类:class,Constructor,Field,Method;

    其中class代表的运行时类对象,Constructor-类的构造器对象,Field-类的属性对象,Method-类的方法对象。通过这四个对象我们可以粗略的看到一个类的各个组 成部分。

    作用

    反射可以让我们在运行时获取类的属性,方法,构造方法、父类、接口等信息,通过反射还可以让我们在运行期实例化对象、调用方法、即使方法或属性是私有的的也可以通过反射的形式调用。

    所有为什么第三方库基本都会使用到反射,正是因为反射这种 “看透 Class” 的能力。

    • Java 反射机制主要提供了以下功能
      在运行时判断任意一个对象所属的类。
      在运行时构造任意一个类的对象。
      在运行时判断任意一个类所具有的成员变量和方法。
      在运行时调用任意一个对象的方法

    反射依赖于类元信息类-->class对象

    • 知道一个类,直接获取 Class 对象
      Class<?> cls1 = ReflectionActivity.class;
    • 如果已经得到了某个对象,可以通过这个对象获取 Class 对象
      ReflectionActivity activity = new ReflectionActivity();
      Class<?> cls2 = activity.getClass();
    • 如果你在编译期获取不到目标类型,但是你知道它的完整类路径,那么你可以通过如下的形式来获取 Class 对象,这样获取可能会抛出异常 ClassNotFoundException。
    try {
        Class<?> cls3 = Class.forName("com.sun.study.ui.activity.ReflectionActivity");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    

    类元信息类-->class对象提供的方法

    得到构造器的方法

    Constructor getConstructor(Class[] params) -- 获得使用特殊的参数类型的公共构造函数,

    Constructor[] getConstructors() -- 获得类的所有公共构造函数

    Constructor getDeclaredConstructor(Class[] params) -- 获得使用特定参数类型的构造函数(与接入级别无关)

    Constructor[] getDeclaredConstructors() -- 获得类的所有构造函数(与接入级别无关)

    获得字段信息的方法

    Field getField(String name) -- 获得命名的公共字段

    Field[] getFields() -- 获得类的所有公共字段

    Field getDeclaredField(String name) -- 获得类声明的命名的字段

    Field[] getDeclaredFields() -- 获得类声明的所有字段

    获得方法信息的方法

    Method getMethod(String name, Class[] params) -- 使用特定的参数类型,获得命名的公共方法

    Method[] getMethods() -- 获得类的所有公共方法

    Method getDeclaredMethod(String name, Class[] params) -- 使用特写的参数类型,获得类声明的命名的方法

    Method[] getDeclaredMethods() -- 获得类声明的所有方法

    其他

    getModifiers()和Modifier.toString():获得属修饰符,例如private,public,static等
    getReturnType():获得方法的返回类型
    getParameterTypes():获得方法的参数类型

    getConstructors():获得类的public类型的构造方法。
    getConstructor(Class[] parameterTypes):获得类的特定构造方法。

    getSuperclass():获取某类的父类
    getInterfaces():获取某类实现的接口

    用处

    http://www.imooc.com/article/19224

    Ref:
    https://www.zhihu.com/question/24304289
    http://sunfusheng.com/java/2016/04/12/reflection-annotation-injection.html

    相关文章

      网友评论

          本文标题:Java-Reflection

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