反射(Reflection)是Java的高级特性之一,是框架实现的基础,定义:Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
一般而言,当用户使用一个类的时候,应该获取这个类,而后通过这个类实例化对象,但是使用反射则可以相反的通过对象获取类中的信息。
通俗的讲反射就是可以在程序运行的时候动态装载类,查看类的信息,生成对象,或操作生成的对象。它允许运行中的Java程序获取自身的信息,自己能看到自己,就像照镜子一样。
Java反射机制常见方法介绍
1.Java反射实现的关键点之Class(字节码文件对象)
Class类的实例表示正在运行的Java应用程序中的类和接口。JVM中有N多的实例,每个类的实例都有Class对象。(包括基本数据类型)
Class没有公共构造方法。Class对象是在加载类时由Java虚拟机以及通过调用类加载器中的defineClass方法自动构造的。也就是这不需要我们自己去处理创建,JVM已经帮我们创建好了。
如果知道一个实例,那么可以通过实例的“getClass()”方法获得运行实例的Class(该类型的字节码文件对象),如果你知道一个类型,那么你也可以使用“.class”的方法获得运行实例的Class。
方法2~17都是类Class的方法。
java.lang.Class继承自java.lang.Object。
2.getName()方法
String getName();返回此Member表示的底层成员或构造方法的简单名称。
3.forName()方法
public static Class<?>forName(String className)
throws ClassNotFoundException
返回与带有给定字符串名的类或接口相关联的Class对象。
参数:className-所需类的完全限定名
4.getSuperclass()方法
public Class<?super T>getSuperclass()
返回:此对象所表示的类的超类。
5.getInterfaces()方法
public Class<?>[]getInterfaces()
返回:该类所实现的接口的一个数组
6.getConstructors()方法
public Constructor<?>[]getConstructors()throws SecurityException
返回:表示此类公共构造方法的Constructor对象数组
7.newInstance()方法
public T newInstance()throws InstantiationException,IllegalAccessException
创建此Class对象所表示的类的一个新实例。如同用一个带有一个空参数列表的new表达式实例化该类。如果该类尚未初始化,则初始化这个类。
返回:此对象所表示的类的一个新分配的实例。
8.getDeclaredConstructors()方法
public Constructor<?>[]getDeclaredConstructors()throws SecurityException
返回Constructor对象的一个数组,这些对象反映此Class对象表示的类声明的所有构造方法。它们是公共、保护、默认(包)访问和私有构造方法。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类存在一个默认构造方法,则它包含在返回的数组中。如果此Class对象表示一个接口、一个基本类型、一个数组类或void,则此方法返回一个长度为0的数组。
返回:表示此类所有已声明的构造方法的Constructor对象的数组