zoukankan      html  css  js  c++  java
  • 【Java基础总结】反射

    1. 什么是反射
      Class、Method、Field、Constructor,它们是反射对象。它们是类、方法、成员变量、构造器,在内存中的形式。
      也就是万物皆对象!类是类型、方法是类型、成员变量是类型、构造器也是类型。
      可以把Class当作类的元神;Method是方法的元神;Field是成员的元神;Constructor是构造器的元神。
      得到了元神就可以来操作宿主。

    2. 获取Class类的对象
      Class表示一个类型,即描述类的类型。
      * 类名.class:Class c1 = Object.class;
      * 对象.getClass():Class c2 = obj.getClass();
      * Class.forName("类全名"):Class c3 = Class.forName("java.lang.String");

      Class的用途:
      * getName():获取类名
      * Class getSupperClass():获取父类类型,即获取父类的元神
      * Class[] getInterces():获取所有实现的接口的类型,即获取所有实现接口的元神。
      * T newInstance():创建该类的实例(通过默认构造器创建,如果该类型没有默认构造器,那么抛出异常)。

    3. 通过Class获取Constructor类对象
      * Constructor[] getConstructors():获取本类中所有public构造器
      * Constructor getConstructor(Class... parameterTypes):获取指定参数类型的公有构造器对象
      * Constructor[] getDeclaredConstructors():获取本类中所有构造器,包含所有访问级别
      * Constructor getDeclaredConstructor(Class... parameterTypes):获取指定参数类型的构造器,包含所有访问级别

      Construtor的用途:
      * T newInstance(Object... params):调用构造器

    4. 通过Class获取Method类对象
      * Method[] getMethods():获取本类和父类中所有public方法
      * Method getMethod(String name, Class... parameterTypes):获取指定名称及参数类型的公有方法,包括父类中的公有方法
      * Method[] getDeclaredMethods():获取本类所有方法,包含所有访问级别;
      * Mehtod getDeclaredMethod(String name, Class... parameterTypes):获取指定名称及参数类型的,包括所有访问级别,但不包含父类中的方法。

      Method的用途:
      * Object invoke(Object obj, Object... params):调用方法,其中obj是当前对象,parmas是参数。如果当前方法是static方法,那么在调用invoke方法时,第一个参数为null。

    5. 通过Class获取Field类对象
      * Field[] getFields():获取本类和父类中所有public成员变量
      * Field getField(String name):获取本类或父类中的指定名称的public成员变量
      * Field[] getDeclaredFields():获取本类中所有访问级别的成员变量,不包括父类中的。
      * Field getDeclaredField(String name):获取本类中指定名称的成员变量,可以是所有访问级别,不包括父类中的。

      Field的用途:
      * void set(Object obj, Object value):给出指定对象的成员变量赋值,obj为当前对象,value为值
      * Object get(Object obj):获取指定对象的成员变量值,obj为当前对象。

    反射的特例:内省

    内省用来操作javabean的属性,JavaBean是一种特殊的类,主要用来传递数据。属性是由getter和setter方法来决定的,即使没有字段,只要有getter和setter方法就是属性。

  • 相关阅读:
    鼠标滑动带动画下拉展开的滑动门代码
    很靓很大气的简约红色CSS菜单代码
    用Cookie来保存菜单当前位置代码
    单击单选按钮切换对应的菜单代码
    仿微软中国的滑动门导航菜单代码
    C#创建SQLServer的存储过程
    通过应用程序域AppDomain加载和卸载程序集(转载)
    多线程学习笔记一(转载)
    C#实现Treeview节点"正在载入..."效果
    JavaScript 学习笔记之函数理解二
  • 原文地址:https://www.cnblogs.com/lhat/p/6178494.html
Copyright © 2011-2022 走看看