總也睡不醒
          一個人只擁有今生今世是不夠的,他還應該擁有詩意的世界
          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 總也睡不醒 閱讀(677) 評論(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
          @總也睡不醒
          百度這個問題,你的頁面在第一個,呵呵,貌似我也懂了點  回復  更多評論
            
          一點一滴,完善自我

          <2007年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          搜索

          •  

          最新評論

          主站蜘蛛池模板: 常德市| 门头沟区| 汝城县| 柳林县| 曲靖市| 炉霍县| 布拖县| 图木舒克市| 清河县| 古田县| 巴塘县| 白银市| 隆林| 云林县| 南涧| 浦江县| 邹平县| 潮州市| 建水县| 眉山市| 平舆县| 镇平县| 泗洪县| 黔西| 广安市| 无为县| 南郑县| 河源市| 镇赉县| 安多县| 准格尔旗| 广南县| 平湖市| 石泉县| 兴和县| 长泰县| 潮州市| 隆子县| 秦安县| 竹北市| 松桃|