传智播客学习之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 相关文章推荐
[JS]点出统计器
Oct 11 Javascript
JS应用之禁止抓屏、复制、打印
Feb 21 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
Aug 25 Javascript
node.js的事件机制
Feb 08 Javascript
javascript 组合按键事件监听实现代码
Feb 21 Javascript
svg动画之动态描边效果
Feb 22 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
Oct 21 Javascript
AngularJS实现的输入框字数限制提醒功能示例
Oct 26 Javascript
使用express+multer实现node中的图片上传功能
Feb 02 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
Apr 30 Javascript
vue实现pdf文档在线预览功能
Nov 26 Javascript
vue实现tab栏点击高亮效果
Aug 19 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中iconv函数使用方法
2008/05/24 PHP
php面向对象 字段的声明与使用
2012/06/14 PHP
php操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
Ubuntu12下编译安装PHP5.3开发环境
2015/03/27 PHP
PHP session 会话处理函数
2016/06/06 PHP
PHP反射实际应用示例
2019/04/03 PHP
再谈IE中Flash控件的自动激活 ObjectWrap
2007/03/09 Javascript
jquery tools系列 expose 学习
2009/09/06 Javascript
Javascript base64编码实现代码
2011/12/02 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
2016/03/23 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
2018/01/18 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
[01:05:59]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
Python正则表达式使用经典实例
2016/06/21 Python
Python中字符串的常见操作技巧总结
2016/07/28 Python
Python中的连接符(+、+=)示例详解
2017/01/13 Python
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
2018/04/05 Python
Python序列循环移位的3种方法推荐
2018/04/09 Python
python3对接mysql数据库实例详解
2019/04/30 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
简单了解python变量的作用域
2019/07/30 Python
python numpy之np.random的随机数函数使用介绍
2019/10/06 Python
利用setuptools打包python程序的方法步骤
2020/01/18 Python
python使用Geany编辑器配置方法
2020/02/21 Python
Tkinter中复选菜单是否被选中的判断与设置方式
2020/03/04 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
Redbubble法国:由独立艺术家设计的独特产品
2019/01/08 全球购物
缓刑人员的思想汇报
2014/01/11 职场文书
完整版商业计划书
2014/09/15 职场文书
预备党员2014年第四季度思想汇报范文
2014/10/25 职场文书
2014年社区民政工作总结
2014/12/02 职场文书
2016应届毕业生实习评语
2015/12/01 职场文书