本帖最后由 王亚运 于 2012-11-20 23:07 编辑
说明:google找到的答案。
还是没看懂,分享下。- 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 PriceTest{
- public static void main(String[] args){
- System.out.println(Price.INSTANCE.currentPrice); //1
- Price p = new Price(2.8);
- System.out.println(p.currentPrice); //2
- }
- }
复制代码[size=14.44444465637207px]程 序中1、2行代码都访问到Price实例的currentPrice实例变量,而且程序都是通过new Price(2.8);来创建Price实例的。 表明上看,程序输出两个Price的currentPrice都应该返回17.2,但实际上程序并没有输出两个17.2,而是输出了-2.8和17.2.下面从内存角度来分析这个程序。第一次用到Price类时,程序开始对Price类进行初始化,初始化分成以下两个阶段:a、系统为Price的两个类变量分配内存空间。b、按初始化代码的排列顺序对类变量执行初始化。在 a阶段,系统纤维INSTANCE、initPrice两个变量分配内存空间,此时INSTANCE、initPrice的值为默认值null和0.0. 接着初始化进入b阶段,程序按顺序依次为INSTANCE和initPrice进行赋值。对INSTANCE赋值时要调用Price(2.8),创建 Price实例,此时立即执行代码:currentPrice = initPrice - discount;为currentPrice进行赋值,此 时initPrice类变量的值还是默认值0.0,因此赋值的结果是currentPrice等于-2.8.接着,程序再将initPrice赋值为 20,但此时对INSTANCE的currentPrice的实例变量已经不起作用了。 当Price类初始化完成后 INSTANCE类变量引用到一个currentPrice为-2.8的Price实例,而initPrice的类变量值为20.0.以后再创建 Price实例时,currentPrice的实例变量的值才等于20.0-discount
不明白,final static Price INSTANCE = new Price(2.8);
什么意思。。。。
源地址:http://www.cnblogs.com/yangfengtao/archive/2012/10/18/2729838.html |