类变量初始化时机

public class Price {
      final static Price INSTACE = 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 ){
           //通过Price的INSTACE来访问currentPrice
           System . out . println ( Price . INSTACE . currentPrice ) ;
           //显示创建price实例
           Price price = new Price ( 2.8 ) ;
           //通过显示创建的price实例来访问currentPrice
           System . out . println ( price . currentPrice ) ;
      }
}

-2.8
17.2

代码结果解释:
        第一次用到Price类时,程序开始对Price类进行初始化,初始化分为以下两个阶段:
        (1)系统为Price的两个类变量分配内存空间。
        (2)按初始化代码(定义时指定初始值和初始化块中执行初始值)的排序顺序对类变量执行初始化。
        初始化第一阶段,系统先为INSTANCE、intiPrice两个类变量分配内存空间,此时INTSTANCE、initPrice的值为默认值为null和0.0。接着初始化进入第二个阶段,程序按顺序依次为INSTANCE、initPrice进行赋值。对 INSTANCE赋值时要调用Price(2.8),创建Price实例,此时立即执行程序中代码为currentPrice进行赋值,此时initPrice类变量的值为0。因此赋值的结果是currentPrice等于-2.8。接着,程序再次将initPrice赋为20,但此时对INSTANCE的currentPrice实例变量已经不起作用了。
        当Price类初始化完成后,INSTANCE类变量引用到一个 currentPrice为-2.8的Price实例,而 initPrice类变量的值为20.0。当再次创建Price实例时,该 Price实例的 currentPrice实例变量的值才等于20.0 - discount
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值