3.2.1 forName 基础

截止目前,获取 class 对象有三种方法:

  1. object.getClass() 方法,获取 对象class 对象。
  2. className.class 获取 指定类class 对象。
  3. Class.forName(className) 方法,获取指定 全限定类名class 对象。

第2、3种方法比较类似,都是通过 类名 获取,但存在重要区别:

  • className.class 中的 className 必须是在 编译时 确定的类的名字,.class 是其 属性
  • forName(className) 中的 className字符串,在运行时确定即可。

下面代码用于获取 dbClassName 指定类的 class 对象:

Class cls = Class.forName( dbClassName );

dbClassName字符串 表示的 全限定类名,从配置文件中读取,直到 运行时 才能获取,所以我们可以通过 修改配置文件 改变 dbClassName 指定的具体类,从而改变动态加载的 class 对象,最后改变反射构造的实际 Facade 实现类的对象。

forName 的作用:加载指定类,并返回 class 对象的引用。

  • forName 的行为是通过类加载器完成的,通常即为 Class.forName 中,加载 Class 对象的类加载器。
  • 若指定类 已经被加载,再不会重复加载,而是直接返回对应引用。
  • 若指定类 未被加载
    1. 类加载器搜索 classpath 路径,寻找合适的 .class 文件。
    2. 如果找到,则读取 .class 文件中的 字节码,并根据字节码构造 class 对象。
    3. 若未找到,则抛出 ClassNotFoundException

results matching ""

    No results matching ""