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的驱动
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


