zoukankan      html  css  js  c++  java
  • 反射

    反射的简介:

    在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.通过反射越过泛型限定

  • 相关阅读:
    詩与胡說张爱玲
    dragscroll 鼠标拖动滚动页面 userjs
    鼠标拖动控制页面滚动 (可运用于全屏触摸设备)
    给Webbrowser 添加用户脚本
    .net 4 环境调用 .net 2 编译的DLL
    webservice远程测试显示 “测试窗体只能用于来自本地计算机的请求”
    解决WebBrowser.DocumentCompleted事件的多次调用
    能够播放地球上现有的几乎所有格式 - VLC – 支持鼠标手势的播放器
    使 WebBrowser 更简单的插入、调用执行脚本, 可安装 jQuery 脚本的 C# 开源代码 IEBrowser
    “暂时没有对您所在的地区提供下载和试听服务”的解决办法
  • 原文地址:https://www.cnblogs.com/wanghuaying/p/9457198.html
Copyright © 2011-2022 走看看