• 反射


    反射的简介:

    在Java中万物皆对象java的反射机制 在运行状态中  

             对于任意一个类 都能知道任意一个类的所有属性和方法
            对于任意一个对象 都能够调用它的任意一个属性和方法
            这种动态获取信息 以及 动态调用的方式 称为java的反射
            "正" 先知道类 然后创建类对象 再去调用属性或者方法
            "反" 先知道对象 然后找到类
            Class类 是所有反射操作的源头
            获取Class类的实例化对象 java中提供了三种获取该类对象的方式
                1.Object类中的getClass()方法
                2.Class c = 类名.class
                3.Class类中的静态方法 forName(传入类名称字符串)


       注意:
                1.反射中所有的泛型 都是 ? 号
                2.反射中方法的返回值 都是Object类型

    2.反射的应用
            T newInstance() 创建此 Class 对象所表示的类的一个新实例。
            相当于 调用类的无参构造 完成对象的创建
            Person p = new Person();

    3.反射的四个类 Class Constructor Field Method
            Class 代表 类的对象
            Constructor 代表 构造器 对象
            Field 代表 属性 对象
            Method 代表 方法 对象


     反射的使用步骤:
                1.导包 java.lang.reflect
                2.获取你想要操作的Class字节码对象
                3.调用方法
                4.操作信息

    Constructor 构造器对象
                1.无参构造
                    使用Class 类中的
                    newInstance()方法 创建该类对象

        2.有参构造
                    使用Class类中的 获取Constructor构造器对象的方法
                    先获取构造器
                    Constructor<T> getConstructor(Class<?>... parameterTypes)
                        返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
                    然后再使用Constructor类中的
                     T newInstance(Object... initargs)
                    使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。

    Field 属性对象
                1.被public修饰的属性
                     Field getField(String name)
                        返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。

    Field类中的
                        void set(Object obj, Object value)
                            将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
                        Object get(Object obj)
                            返回指定对象上此 Field 表示的字段的值。

      2.所有的属性
                     Field getDeclaredField(String name)
                        返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段 
                     Field 继承的方法
                        void setAccessible(boolean flag)
                        将此对象的 accessible 标志设置为指示的布尔值。

    Method 方法对象
                1.被public修饰的方法
                    Method getMethod(String name, Class<?>... parameterTypes)
                        返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
                    Method类中的方法
                        Object invoke(Object obj, Object... args)
                        对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。


                2.所有的方法
                     Method getDeclaredMethod(String name, Class<?>... parameterTypes)
                    返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。

    4.通过反射越过泛型限定

  • 相关阅读:
    C# 创建Excel或需不安装Office
    Spring学习之旅(八)Spring 基于AspectJ注解配置的AOP编程工作原理初探
    Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AOP编程比较
    开发Spring过程中几个常见异常(三):java.lang.ClassCastException: com.sun.proxy.$Proxy4 cannot be cast to com.edu.aop.ArithmeticCalculatorImpl at com.edu.aop.Main.main(Main.java:11)
    Spring学习之旅(六)Spring AOP工作原理初探
    开发Spring过程中几个常见异常(二):Exception encountered during context initialization
    Spring学习之旅(五)极速创建Spring AOP java工程项目
    Spring学习之旅(四)Spring工作原理再探
    Spring学习之旅(三)Spring工作原理初探
    Spring学习之旅(二)极速创建Spring框架java Web工程项目
  • 原文地址:https://www.cnblogs.com/wanghuaying/p/9457198.html
Copyright © 2020-2023  润新知