我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章,点击查看活动详情
一.定义
反射能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。
在java中,能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接。反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。(这是反射在java中的作用)
通过java语言中的反射机制可以操作字节码文件(这是反射机制在java中的作用)
二.为什么要学反射机制?
可能看到上面那一大串概念,我们还是不知道反射是啥。但是学好反射能更好的让我们理解框架,更好的理解底层,尤其是在java中。而反射机制就是反射中一章比较重要的概念,即通过外部文件配置,在不修改源码情况下来控制程序,也符合设计模式的ocp原则(即开闭原则: 不修改源码,开扩容功能)
因为有了反射机制,才会有spring等框架的存在,才会让java成为一个动态语言
三.怎么实际运用?
1.加载类,返回class类型的对象cl 2.通过cl得到加载的类的对象实例 3.通过cl得到加载的类里的某个的方法对象(是的,在这里方法成为了对象,在反射中万物皆对象) 4.通过3得到的方法对象来调用方法
以下是具体代码实现
Class cl = Class.forName(classfullpath);
Object o = cl.newInstance();
System.out.println(o.getClass);
Method method1 = cl.getMethod(methodname);
method1.invoke(o); //传统方法,对象.方法() 反射机制则是方法.invoke(对象)