传智播客学习之java 反射


Posted in Javascript onNovember 22, 2009

此外,毕老师为我们讲解了反射机制,虽然以后我们在开发过程中,不一定会涉及反射,但是反射确实java一种强大的工具,它使我们能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接。例如在Tomcat类加载器这种机制被很多框架所使用。
一、什么是反射
反射的概念是由Smith在1982年首次提出,主要是指程序可以访问、检测和修改本身状态行为的一种能力。反射是java程序开发语言的特征之一,它也允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。
二、java反射所需要的类
1.Class类:它的实例表示正在运行的java应用程序中的类和接口
2.Constructor类:提供关于类的单个构造方法的信息以及对他的访问权限。
3.Method类:提供有关类或接口的单独的某个方法的信息
4.Array类:提供动态创建数组或访问数组的静态方法。
5.Field类:提供有关类或接口的属性的信息,以及对他的动态访问权限。
三、反射的功能
上面我们列举了相关的类,那么具体利用这些类我们可以做一些什么事情呢?
1)获取指定类的Class对象
方法一、通过对象.getClass.(例:Person p;Class c=p.getClass();)
方法二、通过Class类的forName方法(例:Class c=Class.forName(类名);)
方法三、通过类型名.class获取(Class c = int.class)
2)在运行时构造任意一个类的对象,步骤如下:
① 根据类名来创建出它的对象
② 返回这个新创建的对象
l 使用无参构造方法,只需要用class对象的newInstance方法。
Class c=Class.forName(类名);Person p =(Person)c.newInstance;
l 使用有参的构造方法,步骤如下:
① 获取指定类的对象(同上)
② 通过Class对象获取满足指定参数的要求的构造方法类对象
Constructor cons = c.getConstructor(String.class)
③ 调用指定Constructor对象的newInstance方法,传入对用的参数值,创建出对象。
Person p =(Person)cons.newInstance(“张三”);
3)在运行时调用任意一个对象的方法,通过反射甚至可以调用到private方法
① 获取指定类的对象(同上)
② 根据要求创建一个实例
③ 通过Class对象的getDeclaredMethods(根据需要可以选取不同方法)获得Method 的实例,通过invoke方法调用方法
Method m=c.getDeclaredMethods(“setName”,String.class);
returnvalue = m.invoke(p,"zhangsan");
注意:如果是private方法,可以先调用这个方法对应的Method对象的setAccessible(true) 来取消对本方法的安全检查
4)在运行时调用任意一个对象的属性
① 获取指定类的对象(同上)
② 根据要求创建一个实例
③ 通过Class对象的getDeclaredField(根据需要可以选取不同方法)获得Field类 的实例,通过Set方法修改制定对象的值,get获得对象的值。
Field f =c.getDeclaredField("name");
f.set(p,"张三");System.out.println(f.get(p));

Javascript 相关文章推荐
jQuery实战之品牌展示列表效果
Apr 10 Javascript
浅谈javascript的原型继承
Jul 25 Javascript
js获取当前月的第一天和最后一天的小例子
Nov 18 Javascript
JS控制图片等比例缩放的示例代码
Dec 24 Javascript
jQuery实现多按钮单击变色
Nov 27 Javascript
jquery动态改变div宽度和高度
Feb 09 Javascript
jQuery获取浏览器类型和版本号的方法
Jul 05 Javascript
jQuery常用样式操作实例分析(获取、设置、追加、删除、判断等)
Sep 08 Javascript
深入理解JS中的Function.prototype.bind()方法
Oct 11 Javascript
浅谈jQuery中事情的动态绑定
Feb 12 Javascript
Bootstrap Table使用整理(五)之分页组合查询
Jun 09 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
Apr 28 Javascript
Javascript 刷新全集常用代码
Nov 22 #Javascript
写出更好的JavaScript之undefined篇(上)
Nov 22 #Javascript
COM中获取JavaScript数组大小的代码
Nov 22 #Javascript
面向对象的编程思想在javascript中的运用上部
Nov 20 #Javascript
javascript 设置文本框中焦点的位置
Nov 20 #Javascript
ExtJS Grid使用SimpleStore、多选框的方法
Nov 20 #Javascript
Jquery中增加参数与Json转换代码
Nov 20 #Javascript
You might like
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
Symfony2学习笔记之插件格式分析
2016/03/17 PHP
php简单截取字符串代码示例
2016/10/19 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
2017/07/27 PHP
PHP使用OB缓存实现静态化功能示例
2019/03/23 PHP
php给数组赋值的实例方法
2019/09/26 PHP
js加载读取内容及显示与隐藏div示例
2014/02/13 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
Bootstrap弹出框(modal)垂直居中的问题及解决方案详解
2016/06/12 Javascript
JS中script标签defer和async属性的区别详解
2016/08/12 Javascript
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
vue中datepicker的使用教程实例代码详解
2019/07/08 Javascript
微信小程序之几种常见的弹框提示信息实现详解
2019/07/11 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
理解Python中的With语句
2016/03/18 Python
python实现简单遗传算法
2018/03/19 Python
python中ASCII码字符与int之间的转换方法
2018/07/09 Python
python求加权平均值的实例(附纯python写法)
2019/08/22 Python
Python响应对象text属性乱码解决方案
2020/03/31 Python
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
公司营业员的工作总结自我评价
2013/10/05 职场文书
应届生财务管理求职信
2013/11/06 职场文书
社区综治宣传月活动总结
2014/07/02 职场文书
领导走群众路线整改措施思想汇报
2014/10/12 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
总账会计岗位职责
2015/04/02 职场文书
心术观后感
2015/06/11 职场文书
新闻通讯稿范文
2015/07/22 职场文书
2016入党积极分子考察评语
2015/12/01 职场文书
Promise面试题详解之控制并发
2021/05/14 面试题
python模板入门教程之flask Jinja
2022/04/11 Python