• JAVA_SE_笔记整理(反射机制)


    反射机制

    1、反射概述:

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

    要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

    获取Class对象的三种方式:

    1、 Person p = new Person();

      Class c = p.getClass();

    2、 Class c2 = Person.class; // 任意数据类型都具备一个class静态属性,看上去要比第一种方式简单.

    3、 Class c3 = Class.forName("Person"); // 这里的字符串必须是类的全路径

    // 将类名作为字符串传递给Class类中的静态方法forName即可

    分析第三种和前两种的区别:
    前两种你必须明确Person类型.

    后者只需要知道类的字符串形式,扩展性更强。按照配置文件加载就可以了。

    2、通过反射获取构造方法并使用

    第一种方式获取对象:

    Class——newInstance(); // 创建此 Class 对象所表示的类的一个新实例,该对象是通过无参构造new出来的。具有局限性,不能使用多参构造。

    第二种方式获取对象:(可以通过有参构造进行new)

    Constructor ——public T newInstance(Object ... initargs) // 创建带参构造所对应的对象

    public Constructor<?>[] getConstructors() // 获取所有公共构造方法

    public Constructor<?>[] getDeclaredConstructors() // 获取所有构造方法

    public Constructor<T> getConstructor(Class<?>... parameterTypes) // 获取指定构造方法

    参数为,构造方法的参数类型的class

    public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) // 获取指定构造方法,(可以是任意权限的构造方法)

    public void setAccessible(boolean flag) // 设置忽略权限,拿构造不需要忽略权限,但是使用构造需要忽略权限

    3通过反射获取属性并使用

    获取属性:

    public Field[] getFields() // 获取所有公共属性(字段,成员变量)

    public Field[] getDeclaredFields() // 获取所有的属性

    public Field getField(String name) // 获取指定公共属性

    public Field getDeclaredField(String name) // 获取指定属性名称的属性对象

    使用属性:

    Field ——public void set(Object obj, Object value) // 给对象设置值

    第一个参数:对象,第二个参数是值。

    4、通过反射获取方法使用

    获取方法:

    getMethods 获取所有公共方法 包含继承的方法

    getDeclaredMethods 获取所有方法 不包含继承的方法

    getMethod 获取指定公共方法

    getDeclaredMethod 获取指定方法

    强制访问,私有方法method.setAccessible(true);

    使用方法:

    invoke(Object obj, Object... args)

  • 相关阅读:
    java面向对象(五)之多态
    java集合(list,set,map)
    jQuery基础
    Numpy详解
    Pandas详解一
    Linux 解压缩
    Linux 磁盘挂载
    Linux 磁盘管理
    su和sudo命令详解
    Linux查看文件命令
  • 原文地址:https://www.cnblogs.com/songliuzhan/p/12624156.html
Copyright © 2020-2023  润新知