温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java反射机制的原理介绍

发布时间:2021-09-18 16:33:58 来源:亿速云 阅读:159 作者:chen 栏目:编程语言

这篇文章主要介绍“Java反射机制的原理介绍”,在日常操作中,相信很多人在Java反射机制的原理介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java反射机制的原理介绍”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1. 什么是Java反射机制

Java的反射机制是在程序运行时,能够完全知道任何一个类,及其它的属性和方法,并且能够任意调用一个对象的属性和方法。这种运行时的动态获取就是Java的反射机制。其实这也是Java是动态语言的一个象征。

用一句话来概括反射就是加载一个运行时才知道的类以及它的完整内部结构。

2. 为什么要有Java反射机制

我们为什么要用Java的反射机制呢?

我认为有两种:

***种:反射的目的就是为了扩展未知的应用。比如你写了一个程序,这个程序定义了一些接口,只要实现了这些接口的dll都可以作为插件来插入到这个程序中。那么怎么实现呢?就可以通过反射来实现。就是把dll加载进内存,然后通过反射的方式来调用dll中的方法。

第二种:在编码阶段不知道那个类名,要在运行期从配置文件读取类名, 这时候就没有办法硬编码new ClassName(),而必须用到反射才能创建这个对象。

一个生活中常看到的例子有助于理解我们为什么要用Java的反射机制:你进了一家饭店,你不知道他们都有那些菜,要多少钱。那么你***件事情是干啥“服务员拿个菜单过来”,然后指着菜单说“我要这个,我要那个”。

3. 一起来看ReflectionAPI

在生活中,我们使用一个未知的东西的时候总会用帮助来解决我们的使用问题,电视机有帮助,电脑有帮助,几乎所有的事物都携带着它的一本帮助,Java的反射机制也不例外。

在JDK中有Reflection API的帮助,它主要说明了什么是Java反射机制,这种反射机制提供了什么样的属性和方法,进一步我们能够知道能够通过它完成什么样的工作。

下面咱就一起看看这部分的API。这些接口和类都位于lang包里。

如图:

Java反射机制的原理介绍

接口:

Java反射机制的原理介绍

类:

Java反射机制的原理介绍

简单介绍一些类和接口的用法:

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());          }      }   }

***rray 类提供了动态创建和访问 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);                }   }

到此,关于“Java反射机制的原理介绍”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI