【死记硬背】
Class.forName和ClassLoader是Java反射中用于加载类的两种不同方式。
两者区别如下:
Class.forName方法由类调用,负责根据全限定类名加载类,并执行静态初始化。
ClassLoader是抽象类,提供了更灵活的类加载机制,可以自定义类加载过程,从不同来源加载类文件。
【答案解析】
Class.forName是一个静态方法,通过提供类的完全限定名,在运行时加载类。此方法还会执行类的静态初始化块。即指定的类会被加载到 JVM 中,并且它的静态初始化代码会被执行。此方法还提供了一个重载版本,允许你控制是否初始化类 (Class.forName(className, initialize, loader)), 其中 initialize 参数决定是否执行静态初始化块。如果类名不存在或无法访问,将抛出ClassNotFoundException异常。
ClassLoader是一个抽象类,用于查找并加载类的工具。每个Java类都有关联的ClassLoader对象,负责将类文件加载到Java虚拟机中。ClassLoader可以动态加载类,从不同来源加载类文件,如本地文件系统、网络等,但它不负责执行类的初始化代码。类加载器通过诸如 loadClass 方法来实现类的加载,但静态初始化部分是在类加载后,且首次主动使用该类时由 JVM 负责触发。
一般情况下,Class.forName 提供了一种简便的方法来加载并初始化类,适用于反射和需要即时执行静态代码的场景。而 ClassLoader 则提供了更多的灵活性和控制权,适合更复杂的类加载需求和自定义加载策略。
【温馨提示】
点赞+收藏文章,关注我并私信回复【面试题解析】,即可100%免费领取楼主的所有面试题资料!