Java反射机制剖析:定义和API

网友投稿 249 2023-05-18

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;   publicclass TestMethod {   /**        * @param args        * @throws Exception         */ publicstaticvoid 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());           }       }   1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.

4) Filed提供一个类的域的信息以及访问类的域的接口。

示例:

复制import java.lang.reflect.Field;   publicclass TestField {   /**        * @param args        * @throws Exception         */ publicstaticvoid 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());           }       }   1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.

***rray 类提供了动态创建和访问 Java 数组的方法。

示例:

复制import java.lang.reflect.Array;   publicclass TestArray {   public TestArray(){       }   /**        * @param args        * @throws Exception         */ publicstaticvoid 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);       }   1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.

6) Proxy提供动态地生成代理类和类实例的静态方法(这个方法在java放射机制剖析4着重介绍)。

其余的类和接口的使用方法详见API

原文链接:http://blog.csdn.net/lfsf802/article/details/7239652

【编辑推荐】

Java远程方法调用RMI Java处理字符串搜索嵌套结构的方法 Java编程:常见问题汇总 Java迷题:等于,还是不等于? Java数据库连接代码集合

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:揭开二维码背后的神秘面纱用二维码识别 API 就够了
下一篇:api石油库存数据预测(api石油库存数据预测分析)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~