传智播客学习之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 相关文章推荐
jQuery中事件对象e的事件冒泡用法示例介绍
Apr 25 Javascript
jQuery图片切换插件jquery.cycle.js使用示例
Jun 16 Javascript
一个实用的图片切换支持点击切换和自动轮播
Sep 09 Javascript
深入浅析search 搜索框的写法
Aug 02 Javascript
微信小程序 触控事件详细介绍
Oct 17 Javascript
ES6概念 Symbol toString()方法
Dec 25 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
Jan 19 Javascript
详解cordova打包成webapp的方法
Oct 18 Javascript
ajax与jsonp的区别及用法
Oct 16 Javascript
jquery选择器和属性对象的操作实例分析
Jan 10 jQuery
Vue开发中遇到的跨域问题及解决方法
Feb 11 Javascript
VUE项目实现主题切换的多种方法
Nov 26 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
新浪SAE搭建PHP项目教程
2015/01/28 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
2018/08/19 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/25 Javascript
Bootstrap的modal拖动效果
2016/12/25 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
2017/09/05 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
2018/09/10 Javascript
JavaScript惰性载入函数实例分析
2019/03/27 Javascript
详解微信小程序的不同函数调用的几种方法
2019/05/08 Javascript
jQuery表单校验插件validator使用方法详解
2020/02/18 jQuery
[20:39]DOTA2-DPC中国联赛 正赛开幕式 1月18日
2021/03/11 DOTA
Python中的包和模块实例
2014/11/22 Python
Python中eval带来的潜在风险代码分析
2017/12/11 Python
Django中使用celery完成异步任务的示例代码
2018/01/23 Python
遗传算法python版
2018/03/19 Python
Python实现的多叉树寻找最短路径算法示例
2018/07/30 Python
python批量复制图片到另一个文件夹
2018/09/17 Python
使用GitHub和Python实现持续部署的方法
2019/05/09 Python
python队列Queue的详解
2019/05/10 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
2019/08/05 Python
python通用读取vcf文件的类(复制粘贴即可用)
2020/02/29 Python
Flask模板引擎Jinja2使用实例
2020/04/23 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
python音频处理的示例详解
2020/12/23 Python
python中子类与父类的关系基础知识点
2021/02/02 Python
华为慧通笔试题
2016/04/22 面试题
业务部经理岗位职责
2014/01/04 职场文书
安全宣传标语口号
2014/06/06 职场文书
高校群众路线教育实践活动剖析材料
2014/10/10 职场文书
出差报告怎么写
2014/11/06 职场文书
七年级生物教学反思
2016/02/20 职场文书
Java spring定时任务详解
2021/10/05 Java/Android
javascript的setTimeout()使用方法总结
2021/11/20 Javascript
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers