一.作用:

  • Returns the {@code Class} object associated with the class or interface with the given string name.

   上面这是官方文档给出的解释,通俗点说就是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段。并返回与该类相关的Class对象。

例如:

Class t = Class.forName(“java.lang.Thread”);

二.装载类我用new关键字就可以了,为什么我要用Class.forName():

——在回答该问题前让我们先来看看new关键字和Class.forName()的具体过程:
  1.new 关键字:

  当Java语法层面使用new关键字创建一个Java对象时,JVM 首先会检查这个new指令的参数能否在常量池中定位到一个类的符号引用,然后检查与这个符号引用相对应的类是否已经成功经历加载、解析和初始化等步骤,当类完成装载步骤之后,就已经完全确定出创建对象实例时所需的内存空间大小,接下来JVM将会对其进行内存分配,以存储所生成的对象实例。

  2.Class.forName():

  Class.forName()中传入的参数就是类的全限定名,JVM通过该全限定名首先检查该类是否已经被加载,若该类没有被加载则加载该类。并返回该类相关的Class对象。

  3.通过上面的对比我们发现有几个地方Class.forName()可以很好的胜任工作而new关键字却不能:
  • Class.forName()的耦合度更低,因为它不需要在一开始import该类的全限定名,可以在配置文件中直接配置。这也是为什么很多框架都会使用Class.forName()的原因。
  • 不需要该类的实例,只需要初始化该类时。如:数据库驱动

三.补充:Class对象是啥,要它能干什么:

  Class类用来描述一个类的结构,比如描述一个类有哪些成员,有哪些方法等。其封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建。

Class类在很多地方都会用到比如反射等等,所以很多框架中也会很常见该类,这里只是对Class类进行了大概的描述,如果要深入学习,可以参看官方文档,