A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马胜平 中级黑马   /  2012-3-14 18:07  /  2285 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

说出下面程序输出什么结果为什么
  1. class Price{
  2.         final static Price INSTANCE=new Price(2.8);
  3.         static double initPrice=20;
  4.         double currentPrice;
  5.         public Price(double discount){
  6.                 currentPrice=initPrice-discount;
  7.         }
  8. }
  9. public class PriceTest {
  10.         public static void main(String[]args){
  11.                 System.out.println(Price.INSTANCE.currentPrice);
  12.                 Price p=new Price(2.8);
  13.                 System.out.println(p.currentPrice);
  14.                
  15.         }
  16. }
复制代码

4 个回复

倒序浏览
本帖最后由 段浩亮 于 2012-3-16 09:29 编辑

我运行过了打印结果是
-2.8
17.2
你的Price类中的构造函数定义错了  前边没有修饰符,现在Price类中只有一个空参数的构造函数,所以打印结果不是你想要的

sorry 我的回答是错误的,很惭愧{:soso_e110:}
回复 使用道具 举报
本帖最后由 田啸 于 2012-3-14 19:12 编辑

首先看第一个输出语句:
System.out.println(Price.INSTANCE.currentPrice);
这里打印的是 Price 类的静态实例INSTANCE里的currentPrice 属性

  这时候final static Price INSTANCE=new Price(2.8); 因为是在类内部直接new的对象,里会通过构造函数去直接初始化静态实例INSTANCE, (不会像第二种输出里正常地加载类里的变量)而这时候没有执行到下面的
static double initPrice=20;(或者说是没有加载到这个变量)
  因此此时构造函数中的 initPrice初始值默认为零 ,也就得到了结果: currentPrice= 0 - 2.8 = -2.8

第二个输出语句就是正常的输出了,再此不多描述.

改了下代码,这样看起来清楚一点:

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


输出结果:
0.0
-2.8
20.0
17.2
回复 使用道具 举报
楼上答得好啊
回复 使用道具 举报
田啸 发表于 2012-3-14 19:03
首先看第一个输出语句:
System.out.println(Price.INSTANCE.currentPrice);
这里打印的是 Price 类的静态实 ...

学习了  这个分析真心好~~~!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马