反射学习(一)

作者: tinuv 发布时间: 2019-09-09 浏览: 1881 次 编辑

理论学习

  1. Class类

    关于类的抽象,或者说,Class类描述了一个类,每个类中都有一个Class对象,在Java中,类是现实世界的一种抽象,或者说是一种描述,比如Person类,可以根据需求将人抽象成具有性别,年龄属性,能吃饭(方法)的一种实体,同样Class类也抽象了Java类中的一些特点.

  2. 每一个类中都有一个Class对象,可以通过如下方法获得一个Class类的实例

    Class stringClass = new String().getClass();
    Class stringClass = String.class;try {
          Class stringClass = Class.forName("String");
        } catch (ClassNotFoundException e) {
           e.printStackTrace();
        }

    使用类似于String.class看上去一个类的静态变量,实际上由编译器来解析,最后一种方法需要捕获一个异常

  3. 反射是一个类或对象自我检查的一种能力,反射可以使Java代码查看对象的一个类,并确定其结构

  4. 反射可以找到一个类的构造函数,方法和字段,甚至修改字段值,动态的调用方法,以及构造新的对象

  5. 类的主要特性有构造方法,字段(域,成员变量),方法分别由下列类表示

    上述类分别来自java.lang.reflect

    上述类的实例可以通过Class对象获得,Class对象提供了两组方法来获得上述对象,一组允许访问类的公共特性,包括继承的成员,另一组允许访问直接在类中声明的任何公共或非公共成员(不包括继承的成员)

    Class类中关于反射的一些方法

    都是诸如此类的方法,总之,通过Class类可以获得

    安全性

    Method,Constructor等等类都有一个getModifiers()来获得访问权限标志,可以通过Modifier的一个静态方法来解析,如

    Method method = stringClass.getMethod("equalsIgnoreCase");
    int m = method.getModifiers();boolean b = Modifier.isPublic(m);

    私有成员能否访问取决于Java安全管理器和安全策略,在不违反安全策略的情况下,可以通过setAccessible使成员允许访问

    Method method = stringClass.getMethod("equalsIgnoreCase");
    method.setAccessible(true);
    • 构造器

    • 字段

    • 方法

    • 注解

    • 实现的接口

    • 内部类

    • getFields()

    • getDeclaredFields()

    • getField()

    • getDeclardField()

    • 获得字段

    • Constructor

    • Field

    • Method