传智播客学习之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函数整理
Oct 25 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
Jul 15 Javascript
在javascript中创建对象的各种模式解析
May 16 Javascript
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
Dec 01 Javascript
js es6系列教程 - 基于new.target属性与es5改造es6的类语法
Sep 02 Javascript
vue中tab选项卡的实现思路
Nov 25 Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
Dec 20 Javascript
JS实现返回上一页并刷新页面的方法分析
Jul 16 Javascript
利用JS如何获取form表单数据
Dec 19 Javascript
JavaScript使用canvas绘制随机验证码
Feb 17 Javascript
关于vue属性使用和不使用冒号的区别说明
Oct 22 Javascript
Vue过滤器(filter)实现及应用场景详解
Jun 15 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
PHP使用imagick读取PDF生成png缩略图的两种方法
2014/03/20 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
Prototype Template对象 学习
2009/07/19 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
基于jQuery的history历史记录插件
2010/12/11 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
jQuery+AJAX实现无刷新下拉加载更多
2015/07/03 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
Vue.js每天必学之内部响应式原理探究
2016/09/07 Javascript
提高Web性能的前端优化技巧总结
2017/02/27 Javascript
360提示[高危]使用存在漏洞的JQuery版本的解决方法
2017/10/27 jQuery
微信小程序全局变量功能与用法详解
2019/01/22 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
axios如何取消重复无用的请求详解
2019/12/15 Javascript
vue项目中自定义video视频控制条的实现代码
2020/04/26 Javascript
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
进一步了解Python中的XML 工具
2015/04/13 Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
Numpy array数据的增、删、改、查实例
2018/06/04 Python
在Python中获取两数相除的商和余数方法
2018/11/10 Python
Python利用字典破解WIFI密码的方法
2019/02/27 Python
python利用tkinter实现屏保
2019/07/30 Python
PyTorch-GPU加速实例
2020/06/23 Python
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
Ooni英国官网:披萨烤箱
2020/05/31 全球购物
学生实习推荐信范文
2013/11/26 职场文书
高中家长寄语
2014/04/02 职场文书
公司任命书模板
2014/06/06 职场文书
违反交通安全法检讨书
2014/10/24 职场文书
淘宝客服专员岗位职责
2015/04/07 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
高中优秀作文(范文)
2019/08/15 职场文书
关于感恩的作文
2019/08/26 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery