2 flyingzhlunasea FlyingZhLunasea 于 2017.08.29 20:42 提问

求解一个类加载机制的问题


public class SuperClass {
    static{
        System.out.println("superclass init");
    }

    public static int value = 123;

}


public class SubClass extends SuperClass{

    static{
        System.out.println("subclass init");
    }

}

public class Client {

    public static void main(String[] args) {
        System.out.println(SubClass.value);
    }
}

上面这段测试程序执行后,只会输出“superclass init”而不会输出“subclass init”,也就是没有触发子类的初始化,由于对类加载机制不甚了解,求大神解惑,谢谢

2个回答

caozhy
caozhy   Ds   Rxr 2017.08.29 23:59
zy841958835
zy841958835   Ds   Rxr 2017.08.30 08:30

根据think in java里面的讲法 For static fields, only the classes that define this field are initialized 说的是SubClass.value这个value值是
SubClass的父类的 所以只会去初始化SubClass的父类 不然 工程里面所有的静态关键字都要转载进jvm 有点低效率

Csdn user default icon
上传中...
上传图片
插入图片