18.3.1 获得Class对象

18.3.1 获得Class对象

前面已经介绍过了,每个类被加载之后,系统就会为该类生成一个对应的Class对象,通过该Class对象就可以访问到JVM中的这个类。在Java程序中获得Class对象通常有如下三种方式。

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

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

  • 代码更安全。程序在编译阶段就可以检査需要访问的Class对象是否存在。
  • 程序性能更好。因为这种方式无须调用方法,所以性能更好。

也就是说,大部分时候都应该使用第二种方式来获取指定类的Class对象。

但如果程序只能获得一个字符串,例如"java.lang.String",若需要获取该字符串对应的Class对象,则只能使用Class类的forName(String clazzName)方法获取Class对象,该方法可能抛出一个ClassNotFoundException异常。
一旦获得了某个类所对应的Class对象之后,程序就可以调用Class对象的方法来获得该对象和该类的真实信息了。

本文重点

  • 可以通过Class类的forName()方法根据全限定类名获取Class对象。
  • 可以通过类的class属性获取该类的Class对象。
  • 可以通过该类的对象的getClass()方法获取该类的Class对象。