zoukankan      html  css  js  c++  java
  • 反射

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

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

    Class

    阅读API的Class类得知,Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的

    获取Class对象的三种方式

    方式: 通过Object类中的getObject()方法

    Person p = new Person();

    Class c = p.getClass();

    方式二通过 类名.class 获取到字节码文件对象(任意数据类型都具备一个class静态属性,看上去要比第一种方式简单)。

    Class c2 = Person.class;

    方式三通过Class类中的方法(将类名作为字符串传递给Class类中的静态方法forName即可)。

    Class c3 = Class.forName("Person");

    注意:第三种和前两种的区别

    前两种你必须明确Person类型.

    后面是指定这种类型的字符串就行.这种扩展更强.我不需要知道你的类.我只提供字符串,按照配置文件加载就可以了

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

    在反射机制中,把类中的成员(构造方法、成员方法、成员变量)都封装成了对应的类进行表示。其中,构造方法使用类Constructor表示。可通过Class类中提供的方法获取构造方法:

    返回一个构造方法

     public Constructor<T> getConstructor(Class<?>... parameterTypes) 获取public修饰, 指定参数类型所对应的构造方法

     public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 获取指定参数类型所对应的构造方法(包含私有的)

    返回多个构造方法

     public Constructor<?>[] getConstructors() 获取所有的public 修饰的构造方法

     public Constructor<?>[] getDeclaredConstructors() 获取所有的构造方法(包含私有的)

     通过反射获取成员变量并使用

    在反射机制中,把类中的成员变量使用类Field表示。可通过Class类中提供的方法获取成员变量:

    返回一个成员变量

     public Field getField(String name) 获取指定的 public修饰的变量

     public Field getDeclaredField(String name) 获取指定的任意变量

    返回多个成员变量

     public Field[] getFields() 获取所有public 修饰的变量

     public Field[] getDeclaredFields() 获取所有的 变量 (包含私有)

     通过反射获取成员方法并使用

    在反射机制中,把类中的成员方法使用类Method表示。可通过Class类中提供的方法获取成员方法:

    返回获取一个方法:

     public Method getMethod(String name, Class<?>... parameterTypes)

      获取public 修饰的方法

     public Method getDeclaredMethod(String name, Class<?>... parameterTypes)

      获取任意的方法,包含私有的

    参数1: name 要查找的方法名称; 参数2parameterTypes 该方法的参数类型

    返回获取多个方法:

     public Method[] getMethods() 获取本类与父类中所有public 修饰的方法

    public Method[] getDeclaredMethods() 获取本类中所有的方法(包含私有的)

  • 相关阅读:
    浏览器内核
    手机端开发适配问题
    关于样式的问题
    nginx和uwsgi的区别和作用
    Flask (七) 部署
    Flask (六) 项目(淘票票)
    Flask (五) RESTful API
    Flask (四) 模型进阶
    Flask (三) 数据迁移
    Flask (二) cookie 与 session 模型
  • 原文地址:https://www.cnblogs.com/-lwl/p/11112346.html
Copyright © 2011-2022 走看看