java静态变量初始化

直接上代码(Java程序员的基本修养示例)

class Price 
{
	final static Price INSTANCE = new Price(2.8);
	//定义一个初始化变量
	static double initPrice = 20;
	//定义当前价格
	double currentPrice;
	public Price(double discount)
	{
		System.out.printf("initPrice:%f \n",initPrice);
		this.currentPrice = initPrice - discount;
	}

	public static void main(String[] args) 
	{
		//通过INSTANCE访问
		System.out.println(Price.INSTANCE.currentPrice);
		//显示创建对象访问
		Price price = new Price(2.8);
		System.out.println(price.currentPrice);
	}
}
上面的输出结果是什么呢?

你的结果是不是 输出的 currentPrice都是 17.2呢

代码分享:

如果仅仅停留在代码表面看这个问题,很难得到正确的结果
从内存角度分析:
第一次用到Price类是,程序开始对Price类进行初始化
两个阶段:
1.系统为Price的两个变量[initPrice、currentPrice]
2.按初始化代码(定义是指定初始化值和初始化块中执行的初始值)的排列顺序对类变量执行初始化。
初始化第一阶段,系统为INSTANCE、initPrice两个类变量分配内存空间,此时INSTANCE、initPrice的值为默认值null和0.0。接着初始化进入第二个阶段,程序按顺序依次为INSTANCE、initPrice进行赋值。对INSTANCE赋值时要调用Price(2.8),并创建Price实例,此时理解执行程序中构造函数中的代码,当Price类初始化完成后,INSTANCE类变量引用到一个currentPrice为-2.8的Price实例,而initPrice类变量的值为20.0。当再次创建Price实例时 currentPrice = 20.0 - discount。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值