zoukankan      html  css  js  c++  java
  • Class.forName和ClassLoader的区别

    看名字就知道了,一个是类的创建,一个类加载器

    再看下Class.forName源码,调用了ClassLoader

        @CallerSensitive
        public static Class<?> forName(String className)
                    throws ClassNotFoundException {
            Class<?> caller = Reflection.getCallerClass();
            return forName0(className, true, ClassLoader.getClassLoader(caller), caller);
        }

    那么他们的关系就是简单的包含关系了

    写个测试方法测试一下

    public class SimpleClass {
    
        //静态代码块
        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.lgp.SimpleClass");
            System.out.println("#########分割符##########");
            ClassLoader.getSystemClassLoader().loadClass("com.lgp.SimpleClass");
        }
    }

    预期结果

    执行了静态代码块
    执行了静态方法
    #########分割符##########

    所以Class.forName和ClassLoader的区别是

    Class.forName加载并初始化了一个类
    
    ClassLoader仅加载了类
  • 相关阅读:
    python练习六十二:文件处理,往文件中所有添加指定的前缀
    python练习六十一:文件处理,读取文件内容
    使用广度优先搜素查找路径
    不同路径 II
    使用深度优先搜索查找路径
    不同路径
    深度优先搜索
    旋转链表
    java 迭代
    表示图的数据类型
  • 原文地址:https://www.cnblogs.com/ydymz/p/10484347.html
Copyright © 2011-2022 走看看