Class.forName和ClassLoader之间有什么区别呢?
下文笔者讲述Class.forName和ClassLoader关键字的区别,如下所示
Class.forName和ClassLoader区别
字面含义不同: Class.forName:用于创建类 ClassLoader:用于类加载 源码上分析: Class.forName的底层实质是调用ClassLoader 然后进行相关的类初始化操作(类中静态代码运行) 从以上的比对,我们可以看出 Class.forName:加载并初始化一个类 ClassLoader:只加载类
Class.forName源码查看
@CallerSensitive public static Class<?> forName(String className) throws ClassNotFoundException { Class<?> caller = Reflection.getCallerClass(); return forName0(className, true, ClassLoader.getClassLoader(caller), caller); } 底层实际调用ClassLoader
测试方法编写
public class TestClass { //静态代码块 static { System.out.println("运行静态代码块"); } //静态变量 private static String staticFiled = staticMethod(); //赋值静态变量的静态方法 public static String staticMethod() { System.out.println("运行静态方法"); return "给静态字段赋值"; } public static void main(String[] args) throws ClassNotFoundException { Class.forName("com.java265.TestClass"); System.out.println("===================="); ClassLoader.getSystemClassLoader().loadClass("com.java265.TestClass"); } } ------运行以上代码,将输出以下信息---- 运行静态代码块 运行静态方法 ============================
Class.forName和ClassLoader使用场景说明
从两者的应用场景上,我们可以得出 当一个类需要加载,并且类还需初始化,则需使用Class.forName 如:加载mysql的驱动
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。