关灯
开启左侧

反射(一)

[复制链接]
大雨滂沱 发表于 2018-11-26 14:59:07 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
什么是反射?
在运行时加载、探知、使用编译期间完全未知的classes
    允许运行中的 Java 程序对自身进行 “自审”

反射的起源
   当类加载 以后,JVM 便自动产生一个Class 对象 使用该对象就可以获取一个类中的方法、成员以及构造方法的声明和定义等信息
反射API(java.lang.relfect 包)
    反射API用于反应在当前Java虚拟机中的类、接口或者对象信息。
功能:
        —获取一个对象的类信息.
        —获取一个类的访问修饰符、成员、方法、构造方法以及超类的信息.
        —检获属于一个接口的常量和方法声明.
        —创建一个直到程序运行期间才知道名字的类的实例.
        —获取并设置一个对象的成员,甚至这个成员的名字是在程序运行期间才知道.
        —检测一个在运行期间才知道名字的对象的方法


遵循三个步骤
    第一步是获得你想操作的类的 java.lang.Class 对象
    第二步是调用诸如 getDeclaredMethods 的方法
    第三步使用 reflection API 来操作这些信息

获得一个 Class 对象

如果一个类的实例已经得到,你可以使用
       【Class c = 对象名.getClass(); 】
      例: TextField t = new TextField();
              Class c = t.getClass();
              Class s = c.getSuperclass();

如果你在编译期知道类的名字,你可以使用如下的方法                  
                Class c = java.awt.Button.class; 或者  Class c = Integer.TYPE;

如果类名在编译期不知道, 但是在运行期可以获得, 你可以使用下面的方法
          Class c = Class.forName(strg);

实例:

应用反射API
1 .获得类的构造方法
•Constructor getConstructor(Class[] params) -- 获得使用特殊的参数类型的公共构造函数
•Constructor[] getConstructors() -- 获得类的所有公共构造函数
•Constructor getDeclaredConstructor(Class[] params) -- 获得使用特定参数类型的构造函数(与接入级别无关)
•Constructor[] getDeclaredConstructors() -- 获得类的所有构造函数(与接入级别无关)


2.获取类定义变量
•Field getField(String name) -- 获得命名的公共字段
•Field[] getFields() -- 获得类的所有公共字段
•Field getDeclaredField(String name) -- 获得类声明的命名的字段
•Field[] getDeclaredFields() -- 获得类声明的所有字段

3.获取类定义方法
•Method getMethod(String name, Class[] params) -- 使用特定的参数类型,获得命名的公共方法
•Method[] getMethods() -- 获得类的所有公共方法
•Method getDeclaredMethod(String name, Class[] params) -- 使用特写的参数类型,获得类声明的命名的方法
•Method[] getDeclaredMethods() -- 获得类声明的所有方法


创建一个properties文件,把properties文件中的配置信息存入User对象中(利用反射动态实例化对象 案例
创建一个class.properties文件,保存类的基础信息
1.png
创建一个实体类
2.png
创建一个反射工具类
3.png
测试
4.png

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

排行榜
关闭

站长推荐上一条 /1 下一条

官方微信

全国服务热线:

400-0708-360

公司地址:国家西部信息安全产业基地(成都市高新区云华路333号)

邮编:610000    Email:2908503813@qq.com

Copyright   ©2015-2016  EOIT论坛Powered by©Discuz!    ( 蜀ICP备11000634号-7 )