Java反射机制剖析(一)-定义和API
1. 什么是Java反射机制
Java的反射机制是在程序运行时,能够完全知道任何一个类,及其它的属性和方法,并且能够任意调用一个对象的属性和方法。这种运行时的动态获取就是Java的反射机制。其实这也是Java是动态语言的一个象征。
用一句话来概括反射就是加载一个运行时才知道的类以及它的完整内部结构。
2. 为什么要有Java反射机制
我们为什么要用Java的反射机制呢?
我认为有两种:
第一种:反射的目的就是为了扩展未知的应用。比如你写了一个程序,这个程序定义了一些接口,只要实现了这些接口的dll都可以作为插件来插入到这个程序中。那么怎么实现呢?就可以通过反射来实现。就是把dll加载进内存,然后通过反射的方式来调用dll中的方法。
第二种:在编码阶段不知道那个类名,要在运行期从配置文件读取类名, 这时候就没有办法硬编码new ClassName(),而必须用到反射才能创建这个对象。
一个生活中常看到的例子有助于理解我们为什么要用Java的反射机制:你进了一家饭店,你不知道他们都有那些菜,要多少钱。那么你第一件事情是干啥“服务员拿个菜单过来”,然后指着菜单说“我要这个,我要那个”。
3. 一起来看ReflectionAPI
在生活中,我们使用一个未知的东西的时候总会用帮助来解决我们的使用问题,电视机有帮助,电脑有帮助,几乎所有的事物都携带着它的一本帮助,Java的反射机制也不例外。
在JDK中有Reflection API的帮助,它主要说明了什么是Java反射机制,这种反射机制提供了什么样的属性和方法,进一步我们能够知道能够通过它完成什么样的工作。
下面咱就一起看看这部分的API。这些接口和类都位于lang包里。
如图:
接口:
类:
简单介绍一些类和接口的用法。
1) Member成员是一种接口,反映有关单个成员(字段或方法)或构造方法的标识信息
2) InvocationHandler是代理实例的调用处理程序 实现的接口(这个接口的具体用法等到java反射机制剖析4着重介绍)
3) Method提供一个类的方法的信息以及访问类的方法的接口。
示例:
import java.lang.reflect.Method; public class TestMethod { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Class classType=Class.forName(args[0]); Method methods[]=classType.getDeclaredMethods(); for(int i=0;i<methods.length;i++){ System.out.println(methods[i].toString()); } } }
4) Filed提供一个类的域的信息以及访问类的域的接口。
示例:
import java.lang.reflect.Field; public class TestField { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Class classType=Class.forName(args[0]); Field[] fields = classType.getFields(); for(int i=0;i<fields.length;i++){ System.out.println(fields[i].toString()); } } }
5) Array 类提供了动态创建和访问 Java 数组的方法。
示例:
import java.lang.reflect.Array; public class TestArray { public TestArray(){ } /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { Class<?> classType = Class.forName("java.lang.String"); Object array = Array.newInstance(classType, 10); Array.set(array, 5, "hello"); String s = (String)Array.get(array, 5); System.out.println(s); } }
6) Proxy提供动态地生成代理类和类实例的静态方法(这个方法在java放射机制剖析4着重介绍)。
其余的类和接口的使用方法详见API
转载于:https://www.cnblogs.com/springmvc-hibernate/archive/2012/02/07/2483910.html
Java反射机制剖析(一)-定义和API相关推荐
- Java反射机制及API使用
原文地址 反射简单来说,就是动态加载对象,并对对象进行剖析.在Java中的反射机制是指在运行状态中,对于任意一个类,都能够知道并获取这个类的所有属性和方法. Java反射机制的作用: 在运行时判断任意 ...
- Java反射机制深度剖析
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! Java反射机制是Java语言中一种很重要的机制,可能在工作中用到的机会不多,但是在很多框架中都有用到这种机制.我们知道Java是一门静态 ...
- Java反射机制API
实现 Java 反射机制的类都位于 java.lang.reflect 包中,java.lang.Class 类是 Java 反射机制 API 中的核心类. java.lang.Class 类 jav ...
- 月黑雁飞高,反射全知道——剖析java反射机制
文章目录 java 反射机制 反射机制概念 java反射提供的功能 反射的基本使用 反射使用步骤(获取Class对象.调用对象方法) 反射使用 例子People 获取Class的三种方法(获取一个类的 ...
- java初反射_初始 java 反射机制 (一)
反射机制详解 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为j ...
- 工作中用到的java反射机制_(转)JAVA-反射机制的使用
Java反射机制的实现原理 反射机制:所谓的反射机制就是java语言在运行时拥有一项自观的能力.通过这种能力可以彻底的了解自身的情况为下一步的动作做准备.下面具体介绍一下java的反射机制.这里你将颠 ...
- Java学习之二-Java反射机制
问题: 在运行时,对一个JAVA类,能否知道属性和方法:能否调用它的任意方法? 答案是可以的,JAVA提供一种反射机制可以实现. 目录 什么是JAVA的反射机制 JDK中提供的Reflection A ...
- 粗浅看 java反射机制
Java 反射是 Java 被视为动态(或准动态)语言的一个关键性质.这个机制允许程序在运 行时透过 Reflection APIs 取得任何一个已知名称的class 的内部信息,包括其 modifi ...
- Java反射机制Reflection
Java反射机制 1 .class文件 2 Class类 3 Class类与反射机制 4 Java反射机制的类库支持及简介 5 反射机制的定义与应用 6 反射机制Demo Java反射机制demo(一 ...
最新文章
- Ubuntu 16.04下部署Graylog日志服务器
- 新的Google Lyra音频编解码器对实时视频流意味着什么?
- LeetCode之Ransom Note
- 活动目录AD 取用户过期时间accountExpires
- 5.20 考试 20 未完
- linux iconv 文件名,Linux_Linux系统下转换文件编码的方法小结,一、利用iconv命令进行文件内 - phpStudy...
- 最牛通达信短线超强波段主图指标公式 源码
- 超级LINUX VOD系统介绍
- office 2010 安装
- cpri带宽不足的解决方法_CPRI基带数据的低损耗压缩
- mysql 5.7 64位 解压版安装
- 小米平板2可以装鸿蒙系统,搞定LOL?Win10版小米平板2游戏性能实测
- Red Rover 简单字符串应用
- 调用链根因定位论文《Root Cause Analysis of Anomalies of Multitier Services in Public Clouds》
- c语言运算符 amp 的意思,C语言运算符是什么意思
- ORA-02046: 分布式事务处理已经开始解决方案
- 手机浏览器类型ua php,通过userAgent判断手机浏览器类型(示例代码)
- MC指令java,我的世界Java版指令有哪些-我的世界Java版常用指令分享-沧浪手游
- 解读 Java 并发队列 BlockingQueue
- 闲来没事自己研究了下RBAC