传智播客学习之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 数组操作代码集锦
Apr 28 Javascript
javascript addBookmark 加入收藏 多浏览器兼容
Aug 15 Javascript
用Javascript同时提交多个Web表单的方法
Dec 26 Javascript
jquery uaMatch源代码
Feb 14 Javascript
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
Apr 21 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
Jan 09 Javascript
Javascript中的数组常用方法解析
Jun 17 Javascript
AngularJS中watch监听用法分析
Nov 04 Javascript
Angular 4环境准备与Angular cli创建项目详解
May 27 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
Jun 26 Javascript
微信小程序表单验证form提交错误提示效果
Jun 19 Javascript
关于RxJS Subject的学习笔记
Dec 05 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
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
php strlen mb_strlen计算中英文混排字符串长度
2009/07/10 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
js 替换功能函数,用正则表达式解决,js的全部替换
2010/12/08 Javascript
25个优雅的jQuery Tooltip插件推荐
2011/05/25 Javascript
jQuery实现切换页面布局使用介绍
2011/10/09 Javascript
JavaScript中的property和attribute介绍
2011/12/26 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
使用JS+plupload直接批量上传图片到又拍云
2014/12/01 Javascript
轻松实现jquery手风琴效果
2016/01/14 Javascript
KnockoutJs快速入门教程
2016/05/16 Javascript
概述jQuery的元素筛选
2016/11/23 Javascript
利用transition实现文字上下抖动的效果
2017/01/21 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
layui写后台表格思路和赋值用法详解
2019/11/14 Javascript
Python pass 语句使用示例
2014/03/11 Python
Python代码的打包与发布详解
2014/07/30 Python
Python基于pygame模块播放MP3的方法示例
2017/09/30 Python
Python多线程threading和multiprocessing模块实例解析
2018/01/29 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
Python定义二叉树及4种遍历方法实例详解
2018/07/05 Python
Django缓存系统实现过程解析
2019/08/02 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
Python Numpy,mask图像的生成详解
2020/02/19 Python
python pip如何手动安装二进制包
2020/09/30 Python
删除pycharm鼠标右键快捷键打开项目的操作
2021/01/16 Python
自荐书4要点
2014/01/25 职场文书
土建工程师岗位职责
2014/06/10 职场文书
大学课外活动总结
2014/07/09 职场文书
小学关爱留守儿童活动方案
2014/08/25 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书
个人年度总结报告
2015/03/09 职场文书
2015年迎新晚会策划书
2015/07/16 职场文书
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android