黑马程序员技术交流社区

标题: 初始化问题 [打印本页]

作者: 郑世光    时间: 2012-9-21 22:11
标题: 初始化问题
本帖最后由 郑世光 于 2012-9-22 21:49 编辑

下面程序的初始化看得我真的有点乱,谁能讲讲程序执行中那些变量
是怎么变的。结果是-2.8 和17.2

public class PriceTest {
/**
  * @param args
  */
public static void main(String[] args) {
  System.out.println(Price.INSTANCE.currentPrice);
  Price p=new Price(2.8);
  System.out.println(p.currentPrice);
}
}
class Price
{
final static Price INSTANCE =new Price(2.8);
static double initPrice=20;
double currentPrice;
public Price(double discount)
{
  currentPrice=initPrice-discount;
}
}

作者: 张 涛    时间: 2012-9-21 22:18
1.price类中,有一个常量INSTANCE ,类型是price,其属性值是2.8;
2.price中有一个静态变量initPrice,其值是20;
3.构造方法price,传入的参数discount,属性得到的值是20-discount;

4.main方法中,new了一个price对象,传入的参数是2.8;那么实际属性得到的值是20-2.8=17.2;
5.main方法中,第一个打印的值是2.8,第二个打印的值是17.2
作者: 汪小照    时间: 2012-9-21 22:51
public class PriceTest {
/**
  * @param args
  */
public static void main(String[] args) {
  System.out.println(Price.INSTANCE.currentPrice);
  /*
   执行这条语句时:
   由于这条语句用到了Price这个类,所以会把Price类加载到内存,当一个类加载时,类中
   的静态成员也随之加载,并且先给INSTANCE默认初始化为0后,又显初始化new Price(2.8)
   在显示初始化时会时会执行这个构造函数,此时静态成员initPrice默认初始化为0,还没有
   显示初始化为20,因为要等到INSTANCE显示初始化完毕后,initPrice才会显示初始化,所以
   此时currentPrice的值为currentPrice=0-2.8;即为-2.8。此时INSTANCE已显示化完毕,
   然后静态成员initPrice才显示化为20了。
  */
  Price p=new Price(2.8);
  /*
  当在执行这条语句时,此时再调用public Price(double discount)构造函数时,
  已经是20-2.8了,所以第二语句执行后currentPrice才为17.2了。
  */
  System.out.println(p.currentPrice);
}
}
class Price
{
final static Price INSTANCE =new Price(2.8);
static double initPrice=20;
double currentPrice;
public Price(double discount)
{
  currentPrice=initPrice-discount;
}
}

以上标红色字迹是我为你写的程序执行步骤
作者: 郑世光    时间: 2012-9-22 08:55
张 涛 发表于 2012-9-21 22:18
1.price类中,有一个常量INSTANCE ,类型是price,其属性值是2.8;
2.price中有一个静态变量initPrice,其 ...

第一个是 -2.8
作者: 郑世光    时间: 2012-9-22 09:12
汪小照 发表于 2012-9-21 22:51
public class PriceTest {
/**
  * @param args

INSTANCE显示初始化完毕后,initPrice才会显示初始化.那么initPrice的默认初始化是在什么时候。final static Price INSTANCE =new Price(2.8);这句还没执行完,initPrice就该还没有读到,它怎么就有0这个初始值





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2