靜態(tài)數(shù)據(jù)初始化 你 真的了解了嗎?構(gòu)造方法的初始之后。。我又做錯(cuò)了,太粗心了

            下面的程序輸出什么呢?  考慮下哦。。。。

          public class Test {
              
          public static final Test TEST = new Test();
              
          private final int belt;
              
          private static final int CURRENT_YEAR = Calendar.getInstance().get(Calendar.YEAR);
              
              
          public Test(){
                  belt 
          = CURRENT_YEAR - 1930;
              }

              
          public int getBelt(){
                  
          return belt;
              }

              
          public static void main(String []args) throws Exception{
                  System.out.println(TEST.getBelt());
              }

          }

          可能你覺得應(yīng)該是當(dāng)前年- 1930, 例如:今年是2009,2009-1930= 79,運(yùn)行結(jié)果真的是這樣嗎?
          你運(yùn)行下,額,奇怪,居然是 -1930,  額,為什么呢??

            原來 首先其靜態(tài)域 被設(shè)置為缺省值, TEST先設(shè)置為null, belt設(shè)置為0 , 然后TEST構(gòu)造器計(jì)算出來,但我們已經(jīng)初始化belt了,
          belt被設(shè)置為final, 所以忽略了。。。 
          再來看下 下面一個(gè)簡(jiǎn)單的例子,剛開始做的時(shí)候不仔細(xì),哎,, 我錯(cuò)了。。哎~!~ 希望大家不要跟我一樣啊。
           1 class Point {
           2     protected final int x, y;
           3     private final String name;
           4 
           5     Point(int x, int y) {
           6         this.x = x;
           7         this.y = y;
           8         name = makeName();
           9     }
          10 
          11     protected String makeName() {
          12         return "[" + x + "," + y + "]";
          13     }
          14     
          15     public final String toString(){
          16         return name;
          17     }
          18 
          19 }
          20 
          21 public class ColorPoint extends Point {
          22     private final String color;
          23     
          24     ColorPoint(int x, int y, String color){
          25         super(x,y);
          26         this.color = color;
          27     }
          28     protected String makeName() {
          29         return super.makeName()+":"+color;
          30     }
          31     
          32     public static void main(String[] args) {
          33         System.out.println(new ColorPoint(1,2,"abc"));
          34     }
          35     
          36 }

          運(yùn)行結(jié)果:  [1,2]:null
          程序從main啟動(dòng),然后到 25行,super(x,y);   之后 到 第 8行   name = makeName();  再之后29行, return super.makeName()+":"+color;
          這里,方法被子類重載了,運(yùn)行到26行  this.color = color;  最后結(jié)束, 當(dāng)然輸出: [1,2]:null  

          posted on 2009-04-15 19:28 胡鵬 閱讀(238) 評(píng)論(1)  編輯  收藏 所屬分類: java基礎(chǔ)

          評(píng)論

          # re: 靜態(tài)數(shù)據(jù)初始化 你 真的了解了嗎? 2009-04-16 11:29 重慶理工小子

          final是常量,不是靜態(tài)數(shù)據(jù)。
          靜態(tài)是 static
          對(duì)于這個(gè)初始化,常量和變量的申明,可以看看我的這篇文章

          http://www.aygfsteel.com/shenang/archive/2009/04/13/265279.html  回復(fù)  更多評(píng)論   

          導(dǎo)航

          <2009年4月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          統(tǒng)計(jì)

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          agile

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 奈曼旗| 连江县| 潞城市| 吴忠市| 汝南县| 宁都县| 苍山县| 呼玛县| 抚宁县| 荣昌县| 汝城县| 河北区| 敦煌市| 东阳市| 碌曲县| 宜州市| 边坝县| 东城区| 安吉县| 灵川县| 扶绥县| 乐业县| 广丰县| 万源市| 奇台县| 峨边| 芜湖市| 昌黎县| 枣强县| 乳山市| 乌拉特中旗| 宣城市| 靖安县| 辽宁省| 延川县| 乳山市| 隆德县| 通河县| 昌吉市| 许昌市| 舟曲县|