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
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