JAVA中的反射

一  概述

  • JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
  • 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.
  • 反射就是把java类中的各种成分映射成一个个的Java对象

应用场景:程序在运行时接收到外部传入的一个对象,该对象在编译时类型是Object,但程序又需要调用该对象运行时的类型的方法。

为了解决这个问题,程序需要在运行时发现对象和类的真实信息。解决该问题有以下两个做法。

  1. 第一种做法是假设在编译时和运行时的都完全知道类型的真实信息。在这种情况下,可以先使用instanceof运算符进行判断,在利用强制类型转换成成运行时类型的变量即可。
  2. 第二种做法在编译时期无法预知该对象和类可能属于哪些类,程序只能依靠运行时信息来发现该对象和类的真实信息,这就必须使用反射。

二 获得Class对象的三种方式

  • 使用Class类的forName(String className)静态方法。该方法需要传入字符串参数,该字符串参数的值是某个类的权限定类名(必须添加完整包名)。
  • 调用某个类的class属性来获得某个类对应的Class对象。例如: Person.class将返回Person类对应的Class对象。
  • 调用某个对象的getClass()方法。该方法是java.lang.Object类中的一个方法,所以所有的Java对象都可以调用该方法,该方法将返回对象所属类对应的Class对象。

第一种方式和第二种方式都是直接根据类来取得该类的Class对象,相比之下,第二种方式有如下两种优势。

  1. 代码更安全。程序在编译阶段就可以检查需要访问的Class对象是否存在。
  2. 程序性能更加安全。因为无需调用方法,所以性能更好。

三  实现反射的步骤

JAVA中的反射_第1张图片

一个小demo

JAVA中的反射_第2张图片 

 

你可能感兴趣的:(java)