一.作用:
- 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类进行了大概的描述,如果要深入学习,可以参看官方文档,