传智播客学习之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 相关文章推荐
javascript-TreeView父子联动效果保持节点状态一致
Aug 12 Javascript
对采用动态原型方式无法展示继承机制得思考
Dec 04 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
Jan 10 Javascript
Javascript基础教程之定义和调用函数
Jan 18 Javascript
jQuery实现垂直半透明手风琴特效代码分享
Aug 21 Javascript
为什么JavaScript没有块级作用域
May 22 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
Aug 29 Javascript
原生JS实现图片网格式渐显、渐隐效果
Jun 05 Javascript
JavaScript门面模式详解
Oct 19 Javascript
基于vue2实现上拉加载功能
Nov 28 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
Feb 10 Javascript
JQuery表单元素取值赋值方法总结
May 12 jQuery
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中的加密功能
2006/10/09 PHP
PHP 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
php 批量查询搜狗sogou代码分享
2015/05/17 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
Laravel关系模型指定条件查询方法
2019/10/10 PHP
修改file按钮的默认样式实现代码
2013/04/23 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
JS简单实现动画弹出层效果
2015/05/05 Javascript
JS鼠标拖拽实例分析
2015/11/23 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
react.js组件实现拖拽复制和可排序的示例代码
2018/08/20 Javascript
layui实现下拉框三级联动
2019/07/26 Javascript
JavaScript算法学习之冒泡排序和选择排序
2019/11/02 Javascript
Python实现购物系统(示例讲解)
2017/09/13 Python
Python内建函数之raw_input()与input()代码解析
2017/10/26 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
Python 实现还原已撤回的微信消息
2019/06/18 Python
python脚本开机自启的实现方法
2019/06/28 Python
Python操作qml对象过程详解
2019/09/26 Python
python3中pip3安装出错,找不到SSL的解决方式
2019/12/12 Python
Python使用Numpy模块读取文件并绘制图片
2020/05/13 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
数控技术与应用毕业生自荐信
2013/09/24 职场文书
2014年五一活动策划方案
2014/03/15 职场文书
餐饮投资计划书
2014/04/25 职场文书
演讲稿祖国在我心中
2014/05/04 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
幼儿园小班教学反思
2016/03/03 职场文书
2019销售早会主持词
2019/06/27 职场文书
文书工作总结(范文)
2019/07/11 职场文书