反射(Reflection)是Java 程序开发语言的特征之一,它容许运行中的 Java 程序获取自身的信息,而且能够操做类或对象的内部属性。bash
这就意味着,Java语言在运行时,拥有自观能力,经过这种能力能够了解自身,以便为下一步操做作准备。函数
反射的核心是JVM在运行时才动态加载类或调用方法/访问属性,它不须要事先(写代码的时候或编译期)知道运行对象是谁。spa
接下来从几个方面来探讨一下Java的反射机制.net
反射的用途code
反射的基本运用对象
Spring的核心部分,IOC的实现就是经过反射机制实现的。blog
在实例化一个类的时候,Spring会经过反射机制调用类的set方法将事先保存在HashMap中的类属性注入到类中。(借鉴自t_man的专栏)ci
由于初次接触,这里就再也不例举反射机制的其余用途,留待后续补充……开发
Java的反射机制借助于4个类:class,Constructor,Field,Method
get
在Java运行环境中,对于任何一个类,能够获取到这个类的属性和方法。这样动态获取类信息以及动态调用对象的方法的功能源于Java Refleciton
Java反射机制主要提供了
在运行时判断任意一个对象所属的类(class)
在运行时构造任意一个类的对象(Constructor)
在运行时判断任意一个类所具备的成员变量和方法(Field)
在运行时调用任意一个对象的方法(Method)
复制代码
获得构造器
Constructor getConstructor(Class[] params) -- 得到使用特殊的参数类型的公共构造函数,
Constructor[] getConstructors() -- 得到类的全部公共构造函数
Constructor getDeclaredConstructor(Class[] params) -- 得到使用特定参数类型的构造函数(与接入级别无关)
Constructor[] getDeclaredConstructors() -- 得到类的全部构造函数(与接入级别无关)
复制代码
得到字段信息
Field getField(String name) -- 得到命名的公共字段
Field[] getFields() -- 得到全部公共字段
Field getDeclaredField(String name) -- 得到类声明的命名的字段
Field[] getDeclaredFields() -- 得到类声明的全部字段
复制代码
得到方法信息
Method getMethod(String name, Class[] params) -- 使用特定的参数类型,得到命名的公共方法
Method[] getMethods() -- 得到类的全部公共方法
Method getDeclaredMethod(String name, Class[] params) -- 使用特写的参数类型,得到类声明的命名的方法
Method[] getDeclaredMethods() -- 得到类声明的全部方法
复制代码