为什么在不运行调用方法时调用类初始值设定项?

时间:2017-01-31 10:04:41

标签: java static-methods static-initialization

我有一个受保护/锁定的jar文件中的类,我必须解锁才能使用它的任何类。该类从java标准库扩展了一个类:

ProtectedClass extends UnprotectedClass

在我未受保护的代码中,我有以下方法:

public static void xyz() {
    ProtectedClass object = getObjectSomehow();
    object.objectMethod();
    System.out.println(object.methodFromSuperclass());
    //System.out.println(((UnprotectedClass) object).methodFromSuperclass());
}

当我解锁jar然后打电话给xyz()时,它会做它应该做的事情。

但是当我在调用超类方法之前取消注释将对象强制转换为超类的注释掉的行时,我得到一个ExceptionInInitializerError,因为<clinit>的{​​{1}}已在我之前运行打开罐子。当我将ProtectedClassobject提供给另一个参数类型为超类的方法时,会发生同样的情况。

为什么呢?如果在调用方法之前类初始化程序被调用方式,为什么它依赖于我在方法中的操作?

0 个答案:

没有答案