传智播客学习之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 相关文章推荐
静态的动态续篇之来点XML
Aug 15 Javascript
[对联广告] JS脚本类
Aug 27 Javascript
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
Apr 12 Javascript
Open and Print a Word Document
Jun 15 Javascript
JavaScript iframe的相互操作浅析
Oct 14 Javascript
javascript时区函数介绍
Sep 14 Javascript
jquery 表格的增行删行实现思路
Mar 21 Javascript
javascript代码运行不出来执行错误的可能情况整理
Oct 18 Javascript
node.js回调函数之阻塞调用与非阻塞调用
Nov 13 Javascript
JavaScript 冒泡排序和选择排序的实现代码
Sep 03 Javascript
基于Vue渲染与插件的加载顺序的问题详解
Mar 05 Javascript
微信小程序定义和调用全局变量globalData的实现
Nov 01 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更改目录及子目录下所有的文件后缀扩展名的代码
2010/10/12 PHP
php4与php5的区别小结(配置异同)
2011/12/20 PHP
PHP下载远程图片并保存到本地方法总结
2016/01/22 PHP
javascript中使用css需要注意的地方小结
2010/09/01 Javascript
基于jQuery实现音乐播放试听列表
2016/04/14 Javascript
JavaScript中的跨浏览器事件操作的基本方法整理
2016/05/20 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
关于jquery form表单序列化的注意事项详解
2017/08/01 jQuery
JavaScript定时器setTimeout()和setInterval()详解
2017/08/18 Javascript
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
web页面和微信小程序页面实现瀑布流效果
2018/09/26 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
小程序:授权、登录、session_key、unionId的详解
2019/05/15 Javascript
VUE项目中加载已保存的笔记实例方法
2019/09/14 Javascript
js实现一款简单踩白块小游戏(曾经很火)
2019/12/02 Javascript
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
python中循环语句while用法实例
2015/05/16 Python
Python在Console下显示文本进度条的方法
2016/02/14 Python
Python实现OpenCV的安装与使用示例
2018/03/30 Python
python3实现绘制二维点图
2019/12/04 Python
python字符串,元组,列表,字典互转代码实例详解
2020/02/14 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
详解Python中import机制
2020/09/11 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
香港万宁官方海外旗舰店:香港健与美连锁店
2018/09/27 全球购物
飞利浦西班牙官方网站:Philips西班牙
2020/02/17 全球购物
荷兰时尚精品店:Labels Fashion
2020/03/22 全球购物
小学生家长评语集锦
2014/01/30 职场文书
大学生会计职业生涯规划范文
2014/02/28 职场文书
学习十八大宣传标语
2014/10/09 职场文书
雷峰塔导游词
2015/02/09 职场文书
谢师宴学生致辞
2015/07/27 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
MySQL添加索引特点及优化问题
2022/07/23 MySQL