zoukankan      html  css  js  c++  java
  • Java反射相关方法(万物皆对象)

    一、Java的反射机制

      java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的实例对象,可以知道任意一个实例对象它属于哪个类,并知道该类的相关信息,可以了解任意一个类的成员变量和方法,可以调用任意一个实例对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。

    二、反射机制提供的功能

      在运行时判断任何一个实例对象所属的类,在运行时构造任意一个类的实例对象,在运行时判断任意一个类所具有的成员变量和方法,在运行时调运任何一个实例对象的方法以及属性等

    三、获取反射对象,最主要的是了解反射主要的API

    >java.lang.Class:               //代表一个类
    >java.lang.reflect.Method:      //代表类的方法
    >java.lang.reflect.Filed:    //代表类的成员变量
    >java.lang.reflect.Constructer: //代表类的构造器
    >>>等等

    四、通过反射获取类的Class对象的四种方式

    1、调用运行时类本身的class属性

      Class clazz = Book.class;
    2、通过运行时类的对象获取
      Book book = new Book();
      Class clazz = book.getClass();
    3、通过Class对象的静态方法获取:体现反射的动态性
      Class clazz = Class.forName("com.donleo.cn.reflex.Book");
    4、通过类的加载器
      ClassLoader classLoader = this.getClass().getClassLoader();
      Class clazz = classLoader.loadClass("com.donleo.cn.reflex.Book");

    五、Java反射相关的类

    Class类      代表类的实体,在运行的Java应用程序中表示类和接口
    Field类       代表类的成员变量(成员变量也称为类的属性)
    Method类     代表类的方法
    Constructor类   代表类的构造方法

    六、获得类中属性相关的方法

    getField(String name)            //获得某个公有的属性对象
    getFields()                      //获得所有公有的属性对象
    getDeclaredField(String name)    //获得某个属性对象
    getDeclaredFields()          // 获得所有属性对象

    七、获得类中注解相关的方法

    getAnnotation(Class<A> annotationClass)        //返回该类中与参数类型匹配的公有注解对象
    getAnnotations()                    //返回该类所有的公有注解对象
    getDeclaredAnnotation(Class<A> annotationClass) //返回该类中与参数类型匹配的所有注解对象
    getDeclaredAnnotations()               //返回该类所有的注解对象

    八、获得类中构造器相关的方法

    getConstructor(Class...<?> parameterTypes)       //获得该类中与参数类型匹配的公有构造方法
    getConstructors()                     //获得该类的所有公有构造方法
    getDeclaredConstructor(Class...<?> parameterTypes) //获得该类中与参数类型匹配的构造方法
    getDeclaredConstructors()                // 获得该类所有构造方法

    九、获得类中方法相关的方法

    getMethod(String name, Class...<?> parameterTypes)       //获得该类某个公有的方法
    getMethods()                             //获得该类所有公有的方法
    getDeclaredMethod(String name, Class...<?> parameterTypes) //获得该类某个方法
    getDeclaredMethods()                        //获得该类所有方法

    十、类中其他重要的方法

    isAnnotation()                               //如果是注解类型则返回true
    isAnnotationPresent(Class<? extends Annotation> annotationClass) //如果是指定类型注解类型则返回true
    isAnonymousClass()                            //如果是匿名类则返回true
    isArray()                                 //如果是一个数组类则返回true
    isEnum()                                 //如果是枚举类则返回true
    isInstance(Object obj)                         //如果obj是该类的实例则返回true
    isInterface()                              //如果是接口类则返回true
    isLocalClass()                            // 如果是局部类则返回true
    isMemberClass()                            //如果是内部类则返回true

    十一、Field类

    Field代表类的成员变量(成员变量也称为类的属性)

    equals(Object obj)         // 属性与obj相等则返回true
    get(Object obj)          //获得obj中对应的属性值
    set(Object obj, Object value) //设置obj中对应属性值



  • 相关阅读:
    Electron应用打包、自动升级
    使用javascript处理nginx的请求
    使用Electron开发桌面应用
    VSCode、VBox搭建C/C++开发环境
    树莓派搭建Nexus2私服
    Tom猫小游戏功能实现
    如何配置webpack让浏览器自动补全前缀
    git 常用操作
    数组的一些常用操作
    ES6 的模块化
  • 原文地址:https://www.cnblogs.com/donleo123/p/14068990.html
Copyright © 2011-2022 走看看