18.3.1 获得Class对象
18.3.1 获得Class对象
前面已经介绍过了,每个类被加载之后,系统就会为该类生成一个对应的Class
对象,通过该Class
对象就可以访问到JVM
中的这个类。在Java
程序中获得Class
对象通常有如下三种方式。
- 使用
Class
类的forName(String clazzName)
静态方法。该方法需要传入字符串参数,该字符串参数的值是某个类的全限定类名(必须添加完整包名)。 - 调用某个类的
class
属性来获取该类对应的Class
对象。例如,Person.class
.将会返回Person
类应的Class
对象。 - 调用某个对象的
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
对象。