黑马程序员技术交流社区

标题: 一个奇怪现象的分享 [打印本页]

作者: 贾振凯    时间: 2013-3-7 19:44
标题: 一个奇怪现象的分享
本帖最后由 贾振凯 于 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

作者: lzw123451    时间: 2013-3-7 20:03
第二个17.8又是怎么回事
作者: BitmapFactory    时间: 2013-3-7 21:15
第2个LZ敲误,第2 个是17.2
作者: 贾振凯    时间: 2013-3-7 21:33
李志卫 发表于 2013-3-7 20:03
第二个17.8又是怎么回事

呃。。。。。。。。。。。。。。失误失误{:3_48:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2