JAVA 反射机制
来源:互联网 发布:文本框空js弹出遮罩层 编辑:程序博客网 时间:2024/06/16 18:30
要了解Java的反射机制,首先要知道反射机制的概念。
所谓反射机制,就是“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。基于这种看法,我、就我们所了解的Perl,Python是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods
下面我们以这代码来进一步了解一下Java的反射机制。
class Demo{public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception { Class ownerClass = owner.getClass(); Class[] argsClass = new Class[args.length]; for (int i = 0, j = args.length; i < j; i++) { argsClass[i] = args[i].getClass(); } Method method = ownerClass.getMethod(methodName, argsClass); return method.invoke(owner, args); } }
Class owner_class = owner.getClass():首先还是必须得到这个对象的类。4~6行:配置参数的类数组,作为寻找Method的条件。
Method method =ownerClass.getMethod(methodName,argsClass):通过Method名和参数的类数组得到要执行的Method。
method.invoke(owner,args):执行该Method,invoke方法的参数是执行这个方法的对象,和参数数组。返回值是Object,也既是该方法的返回值。
接着我们来了解一下Java反射机制的几种功能:
Java反射机制主要提供了以下功能:
1.在运行时判断任意一个对象所属的类;
2.在运行时构造任意一个类的对象;
3.在运行时判断任意一个类所具有的成员变量和方法;
4.在运行时调用任意一个对象的方法;
5.生成动态代理。
通常我们谈会到动态绑定(dynamic binding)、动态链接(dynamic linking)、动态加载(dynamic loading)等。然而“动态”
没有其固定的意义,它是相对与“静态”而言的。
这里有几种Java 反射机制的使用方法:
1、获取一个Class对象
Class c = this.getClass();ReflectImplement r = new ReflectImplement();//通过类实例获得 Class c1 = r.getClass(); Class subClass = c1.getSuperclass();//通过类实例获得父类对象 Class c2 = ReflectImplement.class;//通过类名.class获得 Class c3 = Class.forName("ReflectImplement");//通过类名字符串获得
2、获得类名称
3、修饰符Modifier
Modifier.toString(c2.getModifiers())//类的修饰符 Field[] fields1 = c2.getDeclaredFields();//该方法访问 Modifier.toString(field1[0].getModifiers())
4、检索类的构造函数
Constructor[] constructor = c1.getDeclaredConstructors();for(int i = 0; i < constructor.length; i++){Constructor cstr = constructor[i];System.out.print("\n" + cstr.getName());System.out.print("\n" + cstr.getDeclaringClass());Class[] cp = cstr.getParameterTypes();for(int j = 0; j < cp.length; j++){System.out.print("\n" + cp[j]);}
5、检索类的方法
Method [] methods = c1.getDeclaredMethods();for(int i = 0; i < methods.length; i++){Method method = methods[i];Class cp[] = method.getParameterTypes();//该方法对应的参数类型method.getExceptionTypes();}
6、检索类所有成员
Field[] fields = c2.getFields();//该方法只能访问公共变量 for(int i = 0; i < fields.length; i++){String str = fields[i].getName() + "" + fields[i].getType().getName();}Field[] fields1 = c2.getDeclaredFields();//该方法访问所有变量
- 【反射】JAVA反射机制
- 【Java】JAVA反射机制
- Java 反射机制[Field反射]
- Java 反射机制[Method反射]
- Java反射机制笔记-反射机制
- java的反射机制
- Java的反射机制
- java反射机制详解!
- Java反射机制
- Java的反射机制
- java 反射机制--侯捷
- java反射机制
- java反射机制
- [候捷]Java反射机制
- java 反射机制
- java 反射机制初探
- 关于Java反射机制
- java反射机制
- MySQL 数据库简明教程
- xp环境下解决LR无法录制使用firefox访问内网的问题
- 关于依赖注入autofac的相关知识
- Android翻页效果原理实现之模拟扭曲
- 宏定义只有一个参数
- JAVA 反射机制
- HashMap的原理
- codeforces 56D Changing a String 区间dp,字符串
- 通俗易懂客户端与服务器端交互原理(HTTP数据请求与HTTP响应,包括Servlet部分
- linux下创建用户 删除修改用户
- 工业4.0如何创造对于软件持续专业发展和系统集成工程师不断增长的需求?
- Day10-选项按钮控件
- log buffer及日志管理深入分析及性能调整(二)
- js验证