Java基础(3)------反射基础

127 阅读2分钟

概念

(以下总结来自java的编程逻辑一书)

正常来说是根据类型进行代码的检查编译,反射则是在运行时而非编译时,动态获取类的信息,比如接口的信息、成员信息、构造方法等,根据这些动态获取的信息创建对象、访问/修改类的成员、调用方法等。我们下面先介绍几个比较常用的类:

常用类

  1. java.lang.Class(类信息对应的类),获取类的对象有以下几种方法:
  • 所有类的根父类有一个方法可以获取Class对象,Class类是一个泛型类,所以该方法不知道具体的类型

  • 获取类对象不一定需要实例对象,使用<类名>.class即可获取class对象,如date.class(注意:基本类型没有getClass方法,也有对应的Class对象,为对应的包装类型,void 作为一种特殊的类型,也有对应的Class类型,具体如下图所示)

  • 还可以使用Class类的一个静态方法forName(可能会抛出ClassNotFoundExcption),可以直接根据类名直接加载类,例如以下程序:

  • Class类中还有一个方法可以用来创建对象:newInstance()(该方法会自动调用无参的public构造方法),如果没有的话,会抛出异常。

介绍获取class对象的方法,介绍一下Class类的常用方法

  1. 获取名字信息
  • public String getName()---返回的是java内部真正使用的名称
  • public String getSimpleName()---返回的名称不带包名
  • public String getCanonicalName()---返回的名称较为友好
  • public Package getPackage()---返回的是包信息

实例:

  1. 获取字段信息

上面的Field是用来获取字段信息的,有以下的基本方法,可以获取字段的信息和操作字段,注意获取修饰符可以用getModifiers(),返回的是一个int类型,有一个枚举类对应可以识别出对应的类型

  1. 获取方法信息