传智播客学习之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 no-repeat写法 背景不重复
Mar 18 Javascript
动态添加删除表格行的js实现代码
Feb 28 Javascript
Javascript添加监听与删除监听用法详解
Dec 19 Javascript
深入理解JavaScript系列(41):设计模式之模板方法详解
Mar 04 Javascript
js实现简单秒表走动的时钟特效
Mar 25 Javascript
AngularJS在IE8的不支持的解决方法
May 13 Javascript
jQuery学习笔记之回调函数
Aug 15 Javascript
jQuery遮罩层实例讲解
May 11 jQuery
详解React 条件渲染
Jul 08 Javascript
浅谈javascript如何获取文件后缀名
Aug 07 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
Jan 07 Vue.js
vue项目两种方式实现竖向表格的思路分析
Apr 28 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
如何选购合适的收音机
2021/03/01 无线电
PHP新手上路(五)
2006/10/09 PHP
eAccelerator的安装与使用详解
2013/06/13 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
使用WAMP搭建PHP本地开发环境
2017/05/10 PHP
Nigma vs Alliance BO5 第一场2.14
2021/03/10 DOTA
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
2011/04/06 Javascript
js replace正则表达式应用案例讲解
2013/01/17 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
2015/12/24 Javascript
深入理解React中es6创建组件this的方法
2016/08/29 Javascript
配置nodejs环境的方法
2017/05/13 NodeJs
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
vue实现分页的三种效果
2020/06/23 Javascript
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
Python实战小程序利用matplotlib模块画图代码分享
2017/12/09 Python
Python基于pycrypto实现的AES加密和解密算法示例
2018/04/10 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
2018/04/27 Python
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
python实现Zabbix-API监控
2018/09/17 Python
python判断计算机是否有网络连接的实例
2018/12/15 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
2019/09/26 Python
Python3爬虫中识别图形验证码的实例讲解
2020/07/30 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
亿企通软件测试面试题
2012/04/10 面试题
面试自我介绍演讲稿
2014/04/29 职场文书
妇女干部培训方案
2014/05/12 职场文书
2015年家长学校工作总结
2015/04/22 职场文书
2015年中秋晚会主持稿
2015/07/30 职场文书