A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贾振凯 中级黑马   /  2013-3-7 19:44  /  1320 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 贾振凯 于 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

3 个回复

正序浏览
李志卫 发表于 2013-3-7 20:03
第二个17.8又是怎么回事

呃。。。。。。。。。。。。。。失误失误{:3_48:}
回复 使用道具 举报
第2个LZ敲误,第2 个是17.2
回复 使用道具 举报
第二个17.8又是怎么回事
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马