JAVA反射机制ppt

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简单示例
import java.lang.reflect.*; public class SearchMethods { public static void main(String args[]) { try { Class c = Class.forName(args[0]); Method m[] = c.getDeclaredMethods(); for (int i = 0; i < m.length; i++) System.out.println(m[i].toString()); } catch (Exception e) { System.err.println(e); } }
应用反射API
创建对象 获取构造器信息 找出类的方法 获取类的字段 根据方法的名称来执行方法
实例:利用反射动态实例化 对象
1 定义一个类的配置文件 如下: 如下:
实例:利用反射动态实例化 对象
2 新建一个 新建一个Account帐号类 如下: 帐号类 如下:
实例:利用反射动态实例化 对象
3 新建一个反射工具类实例化 新建一个反射工具类实例化Account ,并调用 并调用SET方法注入参数 如下: 并调用 方法注入参数 如下:
应用反射API
1 .获得类的构造方法 获得类的构造方法 •Constructor getConstructor(Class[] params) -- 获得使用特殊的参 数类型的公共构造函数 •Constructor[] getConstructors() -- 获得类的所有公共构造函数 •Constructor getDeclaredConstructor(Class[] params) -- 获得使 用特定参数类型的构造函数(与接入级别无关 与接入级别无关) 用特定参数类型的构造函数 与接入级别无关 •Constructor[] getDeclaredConstructors() -- 获得类的所有构造函数 获得类的所有构造函数( 与接入级别无关) 与接入级别无关
应用反射API
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() -- 获得类声明的所有方法
实例:利用反射动态实例化 对象
4 新建一个测试方法 如下: 如下:
wk.baidu.com
反射API
反射API用于反应在当前Java虚拟机中的类、 接口或者对象信息 功能 —获取一个对象的类信息. —获取一个类的访问修饰符、成员、方法、 构造方法以 及超类的信息. —检获属于一个接口的常量和方法声明. —创建一个直到程序运行期间才知道名字 的类的实例. —获取并设置一个对象的成员,甚至这个
Java反射机制
目标
理解Java反射机制 应用Java反射API
什么是反射
在运行时加载、探知、使用编译期间完全 未知的classes 允许运行中的 Java 程序对自身进行 “自审”
Class类
反射的起源 当类加载 以后,JVM 便自动产生一个Class 对象 使用该对象就可以获取一个类中的方法、 成员以及 构造方法的声明和定义等信息
使用 Reflection
java.lang.relfect 包 遵循三个步骤 第一步是获得你想操作的类的 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;
相关文档
最新文档