传智播客学习之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控制表格隔行变色
Jun 26 Javascript
jQuery Ajax文件上传(php)
Jun 16 Javascript
JavaScript中的排序算法代码
Feb 22 Javascript
jquery获取子节点和父节点的示例代码
Sep 10 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
May 16 Javascript
javascript组合使用构造函数模式和原型模式实例
Jun 04 Javascript
JavaScript接口的实现三种方式(推荐)
Jun 14 Javascript
纯JS前端实现分页代码
Jun 21 Javascript
浅析Javascript的自动分号插入(ASI)机制
Sep 29 Javascript
在bootstrap中实现轮播图实例代码
Jun 11 Javascript
js实现一款简单踩白块小游戏(曾经很火)
Dec 02 Javascript
javascript实现计算器功能
Mar 30 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 随机生成10位字符代码
2009/03/26 PHP
PHP字符串处理的10个简单方法
2010/06/30 PHP
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
jquery cookie插件代码类
2009/05/26 Javascript
十分钟打造AutoComplete自动完成效果代码
2009/12/26 Javascript
Javascript学习笔记二 之 变量
2010/12/15 Javascript
javascript中的原型链深入理解
2014/02/24 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
JavaScript实现文字跟随鼠标特效
2015/08/06 Javascript
基于javascript制作微博发布栏效果
2016/04/04 Javascript
JavaScript中判断数据类型的方法总结
2016/05/24 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
JS中利用localStorage防止页面动态添加数据刷新后数据丢失
2017/03/10 Javascript
原生JS实现九宫格抽奖效果
2017/04/01 Javascript
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
2017/09/26 jQuery
RequireJS用法简单示例
2018/08/20 Javascript
ExtJs使用自定义插件动态保存表头配置(隐藏或显示)
2018/09/25 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
2019/04/24 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
微信小程序实现一张或多张图片上传(云开发)
2019/09/25 Javascript
Python3实现定时任务的四种方式
2019/06/03 Python
python二维码操作:对QRCode和MyQR入门详解
2019/06/24 Python
实例详解Python模块decimal
2019/06/26 Python
python__name__原理及用法详解
2019/11/02 Python
Python selenium自动化测试模型图解
2020/04/15 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
html5适合移动应用开发的12大特性
2014/03/19 HTML / CSS
施工安全协议书
2013/12/11 职场文书
党员学习十八大感想
2014/01/17 职场文书
遗体告别仪式主持词
2014/03/20 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
个人买房协议书范本
2014/10/06 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
浅析python中特殊文件和特殊函数
2022/02/24 Python