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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 lwj123 于 2015-3-26 22:28 编辑

主题:final与类变量初始化问题【活动已结束】
奖励技术分数:1-4分
答题链接:技术答题之“final关键字【答题贴】http://bbs.itheima.com/thread-177845-1-1.html
  1. ---------------------------------------------程序1------------------------------------------------
  2. public class PriceTest {
  3.     public static void main(String[] args) {
  4.         //输出位置1   
  5.         System.out.println(Price.INSTANCE.currentPrice);
  6.         Price p = new Price(2.8);
  7.         //输出位置2
  8.         System.out.println(p.currentPrice);
  9.     }
  10. }
  11. class Price {
  12.     public Price(double discount) {
  13.         currentPrice = initPrie - discount;
  14.     }
  15.    
  16.     static final Price INSTANCE = new Price(2.8);
  17.    
  18.     static double initPrie = 20;

  19.     double currentPrice;
  20. }
  21. 问题一:请问程序1两个位置的输出一样吗?为什么?
  22. -------------------------------------------华丽分割线-----------------------------------
  23. ----------------------------------------------程序2--------------------------------
  24. public class PriceTest {
  25.         public static void main(String[] args) {
  26.                 //输出位置1        
  27.                 System.out.println(Price.INSTANCE.currentPrice);
  28.                 Price p = new Price(2.8);
  29.                 //输出位置2
  30.                 System.out.println(p.currentPrice);
  31.         }
  32. }
  33. class Price {
  34.         public Price(double discount) {
  35.                 currentPrice = initPrie - discount;
  36.         }
  37.         
  38.         static final Price INSTANCE = new Price(2.8);
  39.         
  40.         static final double initPrie = 20;

  41.         double currentPrice;
  42. }
  43. 问题二:请问程序2两个位置的输出一样吗?为什么?
复制代码



41 个回复

倒序浏览
                                            捧个场,先拿题长知识
回复 使用道具 举报
程序1不一样,程序二一样
回复 使用道具 举报
as604049322 来自手机 金牌黑马 2015-3-18 21:34:26
板凳
都是一样的,好吧
回复 使用道具 举报
本帖最后由 绝望 于 2015-3-18 22:04 编辑

光看题了...原来不是在这答啊
回复 使用道具 举报
1不一样2一样
回复 使用道具 举报
oyy123 中级黑马 2015-3-19 08:54:22
7#
先看题。
回复 使用道具 举报
第一道不同,第二道一样
回复 使用道具 举报
楼主能解释下原因么?一直想不通
回复 使用道具 举报
第一个不一样,第二个一样。
一个先执行fina时 还没执行到static。就已经读取0-2.8 如果把static double initPrie = 20;放在fina上就会一样
第二个fina方法和fina同时加载

点评

请在指定的区域作答  发表于 2015-3-19 21:56
回复 使用道具 举报
表示看不懂。。
回复 使用道具 举报
Julie 中级黑马 2015-3-20 17:22:34
12#
第一个不一样,第二个一样。但是不知道为什么...
回复 使用道具 举报
哇塞  不太会
回复 使用道具 举报
同楼上!
回复 使用道具 举报
等我再复习复习
回复 使用道具 举报
先看题题
回复 使用道具 举报
第一题不一样,第二题一样。。。
回复 使用道具 举报
CHT 中级黑马 2015-3-26 20:49:07
18#
还没学······
回复 使用道具 举报
一不同,二相同
回复 使用道具 举报
第一题static double initPrie = 20;和static final Price INSTANCE = new Price(2.8);在类加载时按顺序执行的
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马