class Price {
static final Price INSTANCE = new Price(2.8);
static double initPrice = 20;
double currentPrice;
public Price(Double discount) {
currentPrice = initPrice - discount;
}
public static void main(String[] args) {
System.out.println(Price.INSTANCE.currentPrice);
Price price = new Price(2.8);
System.out.println(price.currentPrice);
}
}
答案:-2.8 17.2
分析:考查类变量的初始化时机。从内存角度分析此程序。第一步:类加载时,为static类成员分配内存并指定初始值,INSTANCE赋值null,initPrice赋值0.0。第二步:类变量初始化,INSTANCE初始化,调用构造创建对象,执行计算,此时initPrice为0.0,所有得到结果-2.8。第二条打印语句通过创建对象实例访问局部变量。在构造方法执行前,initPrice已经被赋值20,所以输出17.2