本帖最后由 贾振凯 于 2013-3-7 21:33 编辑
class Price {
final static Price INSTANCE = new Price(2.8);
static double initPrice = 20;
double currentPrice;
public Price(double discount){
currentPrice = initPrice - discount;
}
}
public class SubClass {
public static void main(String[] args) throws Exception{
System.out.println(Price.INSTANCE .currentPrice);
Price p = new Price(2.8);
System.out.println(p .currentPrice);
}
}
在别处看的一段代码,本以为会同时输出17.2,结果却是-2.8,17.2。
琢磨了半天原来是初始化的问题。。。。。。。。。。。。。。。
初始化第一阶段:系统先为INSTANCE,initPrice两个类变量分配内存空间,并行默认初始化,此时的初始化结果为INSTANCE = null initPrice = 0.0中
初始化第二阶段:程序按定义时的初始化顺序对这两个类变量进行初始化,即先对INSTANCE进行初始化,在此过程中要调用构造函数Price(2.8)创建实例对象,而此时构造函数体中
currentPrice = initPrice - discount;
语句中initPrice 的值还为默认的0.0,所以才有了输出的-2.8
|
|