Class.forName和ClassLoader之间有什么区别呢?

乔欣 Java经验 发布时间:2022-12-01 22:57:53 阅读数:9494 1
下文笔者讲述Class.forNameClassLoader关键字的区别,如下所示

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的驱动
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202212/16699067264996.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者