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

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

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          搜索

          •  

          最新評論

          主站蜘蛛池模板: 邵阳县| 罗山县| 五寨县| 兴宁市| 上杭县| 太谷县| 阳西县| 山阳县| 明水县| 长丰县| 响水县| 明光市| 潍坊市| 海阳市| 福清市| 东乌珠穆沁旗| 巴南区| 贡觉县| 桂阳县| 宣城市| 顺平县| 札达县| 乐安县| 和静县| 邻水| 苏尼特左旗| 镇沅| 县级市| 呼和浩特市| 平利县| 上高县| 张掖市| 丰县| 龙陵县| 乌拉特后旗| 获嘉县| 常宁市| 独山县| 米林县| 科技| 门源|