首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

类变量的初始化时机(摘录自java突破软件工程师基本功德16课)

2013-11-02 
类变量的初始化时机(摘录自java突破程序员基本功德16课)先看书本的一个例子,代码如下:public class Price

类变量的初始化时机(摘录自java突破程序员基本功德16课)
先看书本的一个例子,代码如下:

public 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 test {public static void main(String[] args){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,initPrice的值为默认值null和0.0接着初始化进入第二个阶段,程序按顺序依次为INSTANCE,initPrice进行赋值。对INSTANCE赋值时调用Price(2.8),创建Price实例,此时立即执行程序中为currentPrice进行赋值,此时initPrice的值为0,因此赋值的结果是currentPrice等于-2.8.接着,程序再次将initPrice赋值为20,得出p的currentPrice的值为17.2.

更具此原理,我们不难的出,想要达到我们理想的效果,只需要将

final static Price INSTANCE=new Price(2.8);static double initPrice=20;


 

两行代码呼唤顺序即可。

本人测试无误。

热点排行