總也睡不醒
          一個人只擁有今生今世是不夠的,他還應該擁有詩意的世界
          posts - 3,  comments - 5,  trackbacks - 0
          先看一下代碼:
           1 enum MyColor { red, green, blue}
           2 
           3 public class TestEnum {
           4 
           5     public static void main(String[] args) {
           6         MyColor m = MyColor.blue;
           7 
           8         switch(m) {
           9             case red:
          10                 System.out.println("red");
          11                 break;
          12             case green:
          13                 System.out.println("green");
          14                 break;
          15             case blue:
          16                 System.out.println("blue");
          17                 break;
          18             default:
          19                 System.out.println("default");
          20                 break;
          21         }
          22 
          23         System.out.println(m);
          24     }
          25 }
          26 

          TestEnum類編譯后,會產生三個class文件:MyColor.class、TestEnum$1.class、TestEnum.class。

          枚舉就相當于一個類,所以會有MyColor.class。問題是:為什么會出現TestEnum$1.class這個匿名類。難道是枚舉類中使用的red, green, blue三個值造成的。

          那位大俠知道,給小弟解釋一下,先謝謝了!
          posted on 2007-08-07 19:03 總也睡不醒 閱讀(676) 評論(2)  編輯  收藏 所屬分類: JavaSE

          FeedBack:
          # re: 提問:使用枚舉的類中為何會出現一個匿名類?
          2007-08-08 14:13 | 總也睡不醒
           沒人理我!自己先頂一個。
           
          我用Jode反編譯后,TestEnum類成了這樣:
            1public class TestEnum
            2{
            3    public static void main(String[] strings) {
            4    MyColor mycolor = MyColor.blue;
            5    switch (ANONYMOUS CLASS TestEnum$1.$SwitchMap$MyColor
            6        [mycolor.ordinal()]) {
            7    case 1:
            8        System.out.println("red");
            9        break;
          10    case 2:
          11        System.out.println("green");
          12        break;
          13    case 3:
          14        System.out.println("blue");
          15        break;
          16    default:
          17        System.out.println("default");
          18    }

          19    System.out.println(mycolor);
          20    }

          21}
          注意看switch語句塊和原文的不同。第五行出現了匿名類,這應該就是TestEnum$1.class產生的原因。再看每個case語句,red green blue變成了1 2 3。這也是枚舉常量的實質。不過我又奇怪了, 枚舉類型的ordinal方法API幫助上是這么寫的:“返回枚舉常量的序數(它在枚舉聲明中的位置,其中初始常量序數為零)”。
           
          所以啊,不研究不知道,一研究問題一大堆。看來我得要理解JVM和Java對枚舉和匿名類的處理方式了。不過以我現在的水平,不是一時半會兒能完全想明白的。
           
          那位高手能指點我一下嗎?謝謝了先!
            回復  更多評論
            
          # re: 提問:使用枚舉的類中為何會出現一個匿名類?[未登錄]
          2013-09-16 17:14 | ma
          @總也睡不醒
          百度這個問題,你的頁面在第一個,呵呵,貌似我也懂了點  回復  更多評論
            
          一點一滴,完善自我

          <2013年9月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          搜索

          •  

          最新評論

          主站蜘蛛池模板: 盐池县| 诸暨市| 遵义市| 常山县| 呼和浩特市| 兴文县| 广河县| 香河县| 凯里市| 涟源市| 前郭尔| 仁怀市| 沂南县| 平定县| 施甸县| 乌兰浩特市| 青海省| 宝应县| 资溪县| 保康县| 揭西县| 兴业县| 新邵县| 古浪县| 明水县| 静安区| 安远县| 嘉定区| 邯郸市| 民勤县| 阳新县| 巴林左旗| 方山县| 环江| 古丈县| 城市| 新田县| 广西| 德化县| 刚察县| 福清市|