我们在开发过程中会经常遇见反射机制,今天我就来说说反射机制。
Java的反射机制是Java特性之一。反射机制是构建框架技术的基础所在,我们在构建框架的时候一定会用到反射机制。灵活的掌握java的反射机制。对与我们的开发将有很大的帮助。
java反射是指在运行状态中,动态获取信息以及动态调用对象方法的功能。
java反射3个动态性质:
运行时生成对象实例
运行期间调用方法
运行时更改属性
如何理解java反射的原理呢? 首先我们要知道java程序的执行过程。
要想java程序能够运行,java类必须被java虚拟机加载。运行的过程都是在编译时就已经加载了所需要的类。
HelloWorld.java--->编译器-------->HelloWorld.claaa----->java虚拟机------->运行程序
java反射机制在编译是并不确定是哪个类加载了,而是在程序运行的时候才加载、探知、使用。这样的特点就是反射。这类似于光学中的反射概念。所以把java的这种机制成为反射机制。 在计算机科学领域,反射是指一类应用,他们能够自描述和自控制。
java反射机制能够知道类的基本结构,这种对java类结构探知的能力,称为java类的“自审”。我们使用Eclipse时,java代码的自动提示功能就是利用了java反射的原理,是对所创建对象的探知和自审。
通过java反射,可以实现以下功能:
运行时判断任意一个对象所属的类
在运行是构造任意一个类的对象
在运行是判断任意一个类锁具有的方法和属性
在运行时调用任意一个对象的方法。
java反射常用的类:
Class类:反射的核心类,反射所有的操作都是围绕该类来生成。通过Class类,可以获取类的属性,方法类内容信息。
Filed类:表示类的属性,可以获取和设置类中的属性的值。
Mothod类:表示类的方法,它可以用来获取类中方法的信息,或者执行方法
Constructor类:表示累的构造方法。
在java程序中使用反射的基本步骤如下:
1、导入java.lang.reflect.*;
2、获取需要操作的累的java.lang.Class对象
3、调用Class的方法获取Filed,Method等对象
4、使用反射API进行操作
明天将继续说java中的反射,并且结合代码来分析反射机制。
注意:使用反射虽然会很大程度上提高代码的灵活性,但是不能滥用反射,因为通过反射创建对线时性能要稍微低一些,实际上,只有当程序需要动态创建某个类的对象时才会考虑用到反射,通常在开发通用性比较广的框架,基础平台时可能会大量使用反射,因为在很多java平台框架中都需要根据配置文件信息来创建java对象。从配置文件读取的只是某个类的字符串类名,程序需要根据字符串来创建对象的实例,就必须使用反射。