【问题标题】:Why Java class loader executes "static" content, like Class.forName为什么 Java 类加载器执行“静态”内容,例如 Class.forName
【发布时间】:2018-12-01 14:07:52
【问题描述】:

我搜索了 ClassLoader 和 Class.forName 之间的区别,大多数答案说 Class.forName 将操作类的“静态”部分,而 ClassLoader 不会。所以我测试了这个:

public static void main(String[] args) {
    try {
        ClassLoader l = ClassLoader.getSystemClassLoader();
        Class c2 = l.loadClass("C");
        Constructor ctor2 = c2.getConstructor();
        C obj2 = (C) ctor2.newInstance();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

打印出来:

static
default ctor

好吧,不是我的预期,ClassLoader 为何以及何时执行“静态”部分?如果它也执行“静态”,那么这两者的核心区别是什么?

非常感谢。

【问题讨论】:

    标签: java class static loader


    【解决方案1】:

    l.loadClass("C");will not 导致执行静态初始化程序,同时创建实例。

    您可以删除以下代码并重试:

    Constructor ctor2 = c2.getConstructor();
    C obj2 = (C) ctor2.ne
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多