传智播客学习之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拖动插件(jquery.drag)使用介绍
Jun 18 Javascript
jquery封装的对话框简单实现
Jul 21 Javascript
IE8的JavaScript点击事件(onclick)不兼容的解决方法
Nov 22 Javascript
javascript图片预加载完整实例
Dec 10 Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
Jan 17 Javascript
Vue.js中extend选项和delimiters选项的比较
Jul 17 Javascript
vue proxyTable 接口跨域请求调试的示例
Sep 12 Javascript
vue实现简单loading进度条
Jun 06 Javascript
Bootstrap的aria-label和aria-labelledby属性实例详解
Nov 02 Javascript
微信小程序基于Taro的分享图片功能实践详解
Jul 12 Javascript
解决vue下载后台传过来的乱码流的问题
Dec 05 Vue.js
vue+openlayers绘制省市边界线
Dec 24 Vue.js
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中smarty模板条件判断用法实例
2015/06/11 PHP
php使用pear_smtp发送邮件
2016/04/15 PHP
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
2013/02/05 Javascript
Javascript模拟加速运动与减速运动代码分享
2014/12/11 Javascript
使用JavaScript实现旋转的彩圈特效
2015/06/23 Javascript
JS实现获取剪贴板内容的方法
2016/06/21 Javascript
js 获取本地文件及目录的方法(推荐)
2016/11/10 Javascript
Vue Socket.io源码解读
2018/02/07 Javascript
微信小程序实现登录遮罩效果
2018/11/01 Javascript
jQuery中使用validate插件校验表单功能
2019/05/24 jQuery
React 实现车牌键盘的示例代码
2019/12/20 Javascript
vue-cli3 热更新配置操作
2020/09/18 Javascript
python读取浮点数和读取文本文件示例
2014/05/06 Python
Python合并字典键值并去除重复元素的实例
2016/12/18 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
详解python3中的真值测试
2018/08/13 Python
python生成九宫格图片
2018/11/19 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
python定位xpath 节点位置的方法
2019/08/27 Python
Python Selenium自动化获取页面信息的方法
2020/08/31 Python
吃透移动端 1px的具体用法
2019/12/16 HTML / CSS
美国糖果店:Sugarfina
2019/02/21 全球购物
攀岩、滑雪、徒步旅行装备:Black Diamond Equipment
2019/08/16 全球购物
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
应急管理培训方案
2014/06/12 职场文书
2014年学校德育工作总结
2014/12/05 职场文书
幼儿园园长新年寄语2015
2014/12/08 职场文书
2015元旦主持词开场白和结束语
2014/12/14 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
活动经费申请报告
2015/05/15 职场文书
生活小常识广播稿
2015/08/19 职场文书
寒假致家长的一封信
2015/10/10 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python