本帖最后由 田啸 于 2012-3-14 19:12 编辑
首先看第一个输出语句:
System.out.println(Price.INSTANCE.currentPrice);
这里打印的是 Price 类的静态实例INSTANCE里的currentPrice 属性
这时候final static Price INSTANCE=new Price(2.8); 因为是在类内部直接new的对象,里会通过构造函数去直接初始化静态实例INSTANCE, (不会像第二种输出里正常地加载类里的变量)而这时候没有执行到下面的
static double initPrice=20;(或者说是没有加载到这个变量)
因此此时构造函数中的 initPrice初始值默认为零 ,也就得到了结果: currentPrice= 0 - 2.8 = -2.8
第二个输出语句就是正常的输出了,再此不多描述.
改了下代码,这样看起来清楚一点:
class Price{
final static Price INSTANCE=new Price(2.8);
static double initPrice=20;
double currentPrice;
Price(double discount){
System.out.println(initPrice);
currentPrice=initPrice-discount;
}
}
public class PriceTest {
public static void main(String[]args){
System.out.println(Price.INSTANCE.currentPrice);
Price p=new Price(2.8);
System.out.println(p.currentPrice);
}
}
输出结果:
0.0
-2.8
20.0
17.2 |