传智播客学习之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 相关文章推荐
Javascript获取HTML静态页面参数传递值示例
Aug 18 Javascript
javascript对中文按照拼音排序代码
Aug 20 Javascript
JavaScript 变量、作用域及内存
Apr 08 Javascript
Angularjs中使用Filters详解
Mar 11 Javascript
基于JavaScript实现购物网站商品放大镜效果
Sep 06 Javascript
jQuery弹出遮罩层效果完整示例
Sep 13 Javascript
canvas绘制万花筒效果(代码分享)
Jan 20 Javascript
js图片放大镜实例讲解(必看篇)
Jul 17 Javascript
JSONP原理及应用实例详解
Sep 13 Javascript
Windows下安装 node 的版本控制工具 nvm
Feb 06 Javascript
js canvas实现五子棋小游戏
Jan 22 Javascript
JavaScript如何实现防止重复的网络请求的示例
Jan 28 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
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
Alliance vs Liquid BO3 第一场2.13
2021/03/10 DOTA
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
jQuery 学习 几种常用方法
2009/06/11 Javascript
jQuery学习4 浏览器的事件模型
2010/02/07 Javascript
原生javascript兼容性测试实例
2013/07/01 Javascript
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
使用ajax+jqtransform实现动态加载select
2014/12/01 Javascript
js友好的时间返回函数
2016/08/24 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
2017/01/17 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
vue 中filter的多种用法
2018/04/26 Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
2019/01/22 Javascript
vue项目前端埋点的实现
2019/03/06 Javascript
AngularJs中$cookies简单用法分析
2019/05/30 Javascript
[01:06]DOTA2小知识课堂 Ep.02 吹风竟可解梦境缠绕
2019/12/05 DOTA
Python  连接字符串(join %)
2008/09/06 Python
Python的for和break循环结构中使用else语句的技巧
2016/05/24 Python
利用django如何解析用户上传的excel文件
2017/07/24 Python
Python文件操作之合并文本文件内容示例代码
2017/09/19 Python
pycharm修改界面主题颜色的方法
2019/01/17 Python
wxPython实现列表增删改查功能
2019/11/19 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
2020/08/17 Python
全球速卖通巴西站点:Aliexpress巴西
2016/08/24 全球购物
美国豪华时尚女性精品店:Kirna Zabête
2018/01/11 全球购物
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
兰蔻俄罗斯官方网站:Lancome俄罗斯
2019/12/09 全球购物
日期和时间问题
2015/01/04 面试题
补充协议书范本
2014/04/23 职场文书
工程材料采购方案
2014/05/18 职场文书
2014小学教师个人工作总结
2014/11/10 职场文书
高中教师个人总结
2015/02/10 职场文书
大学生实习介绍信
2015/05/05 职场文书
Python编程源码报错解决方法总结经验分享
2021/10/05 Python