一、首先,查看Class类中的forName方法,可以发现有如下三个方法,但是我们通常用的是只有一个参数的方法。

  java中Class.forName("xxx")和ClassLoader().loadClass("xxx")的区别-LMLPHP

  简单介绍一下这三个方法:

  1. 第一个方法Class.forName("xxx")等同于第二个方法Class.forName("xxx",true,this.getClass().getClassLoader()),第二个布尔类型的参数表示装载该类的时候,是否初始化该类,即是否调用类中的static静态块函数及初始化静态成员变量;
  2. 第三个方法forName0是一个native方法,也就是第二个方法内部调用的。

二、查看ClassLoader().loadClass()方法,可以从下面源码看出,并没有指定是否初始化类的参数,只有通过clazz.newInstance()才能够初始化类。

  java中Class.forName("xxx")和ClassLoader().loadClass("xxx")的区别-LMLPHP

  因此,可以说与Class.forName("xxx", false, ,this.getClass().getClassLoader())原理是基本相同的。

05-06 11:43