ClassLoader.getSystemClassLoader().loadClass()和Class.forName()有什么区别
时间: 2023-12-19 17:34:20 浏览: 28
ClassLoader.getSystemClassLoader().loadClass() 和 Class.forName() 都可以用于动态加载类,但它们有一些区别。
1. 参数类型:
- ClassLoader.getSystemClassLoader().loadClass() 方法接受一个字符串参数,表示要加载的类的全限定名。
- Class.forName() 方法接受一个字符串参数,表示要加载的类的全限定名,还可以接受一个可选的布尔值参数来指定是否执行静态代码块。
2. 类加载器:
- ClassLoader.getSystemClassLoader().loadClass() 使用系统类加载器进行类的加载。
- Class.forName() 使用调用者的类加载器进行类的加载。如果调用者是由引导类加载器加载的类,则使用引导类加载器进行加载。
3. 初始化行为:
- ClassLoader.getSystemClassLoader().loadClass() 方法只会加载类,不会执行静态代码块或初始化该类的静态成员。
- Class.forName() 方法默认会初始化该类,包括执行静态代码块和初始化静态成员。但是,如果将可选的布尔值参数设为 false,可以抑制初始化行为。
综上所述,ClassLoader.getSystemClassLoader().loadClass() 主要用于简单地加载类,而 Class.forName() 在加载类的基础上还可以执行更多的初始化行为。在一些特殊的情况下,如需要动态地加载并初始化类时,Class.forName() 可能更适合使用。