Java 基础之详解 Java 反射机制
发布于:2019-11-15   作者:admin   浏览:436次

  反射(Reflection)是Java的高级特性之一,是框架实现的基础,定义:Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为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对象的数组