青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

java enum 淺析

jdk5.0發布以后,添加了枚舉類型,其實當初在從Delphi轉向Java的時候,我就在為java中沒有枚舉這個功能感到不可思議。因為枚舉類型在很多方面有著獨特作用,現在好了,java中添加了這項功能,今天我就試了試,還滿好的。
                                                                                   

java中的枚舉類型包括了其他語言中枚舉類型的一般特性。

public class EnumDemo{
   public enum Seasons {
    winter,spring,summer,fall;
}
public static void main(String[] args){
   for(Seasons s:Seasons.values()){
    System.out.println(s);
}
}
上面這個例子,展示了枚舉類型的一般用法,在java的枚舉類中提供了靜態values()方法以供循環迭代時使用。大家再看一看下面這個例子:

public enum Seasons {

winter,

spring,

summer,

fall;

//list the values

public static void main(String[] args) {

for(Seasons s:Seasons.values())

   {

      System.out.println(s);

   }

}

}


這兩個例子得出的是一樣的結果。由此可知enum關鍵字是代表一個類相當于class的意思,但是它又比class的范圍要小,僅僅代表枚舉類而已。


java
中的枚舉類除了有這些一般的功能外還包括一些特殊的功能,例如:枚舉類型可以有構造函數、可以添加任意多的方法和屬性;同時枚舉類型還可以為不同的屬性添加不同的方法。


在這里我們假設你希望向一個枚舉類中添加數據和行為。例如我們可以設想一下銀河系的星球。每個星球的它自己的特定數據,由此來計算物體在其表面上的重量。下面就是實例:

public enum Planet {

     MERCURY (3.303e+23, 2.4397e6),

     VENUS    (4.869e+24, 6.0518e6),

     EARTH    (5.976e+24, 6.37814e6),

     MARS     (6.421e+23, 3.3972e6),

     JUPITER (1.9e+27,    7.1492e7),

     SATURN   (5.688e+26, 6.0268e7),

     URANUS   (8.686e+25, 2.5559e7),

     NEPTUNE (1.024e+26, 2.4746e7),

     PLUTO    (1.27e+22,   1.137e6);

     private final double mass;    // in kilograms

     private final double radius; // in meters

     Planet(double mass, double radius) {

         this.mass = mass;

         this.radius = radius;

     }

     public double mass()    { return mass; }

     public double radius() { return radius; }


     // universal gravitational constant   (m 3 kg -1 s-2)

     public static final double G = 6.67300E-11;


     public double surfaceGravity() {

         return G * mass / (radius * radius);

     }

     public double surfaceWeight(double otherMass) {

         return otherMass * surfaceGravity();

     }

     public static void main(String[] args) {

         double earthWeight = Double.parseDouble(args[0]);

         double mass = earthWeight/EARTH.surfaceGravity();

         for (Planet p : Planet.values())

            System.out.printf("Your weight on %s is %f%n",

                              p, p.surfaceWeight(mass));

     }


}
運行結果:

C:\java>java Planet 60
Your weight on MERCURY is 22.665457
Your weight on VENUS is 54.299946
Your weight on EARTH is 60.000000
Your weight on MARS is 22.724231
Your weight on JUPITER is 151.833452
Your weight on SATURN is 63.960932
Your weight on URANUS is 54.307632
Your weight on NEPTUNE is 68.299684
Your weight on PLUTO is 4.012468

在這里我們可以看到這個枚舉類中含有一個帶有兩個參數的構造函數。通過構造函數我們可以產生含有不同數據特征的星球對象。在main()函數中,我們通過有不同的星球調用相同的方法來得到物體在該星球上的重量。


我們可以把為枚舉常量添加行為的主意更向前推進一步。我們可以為不同枚舉常量添加不同的行為。通過使用switch語句是達到這個目的的一種方法。下面就有一個實例:

public enum Operation {

     PLUS, MINUS, TIMES, DIVIDE;

     // Do arithmetic op represented by this constant

     double eval(double x, double y){

         switch(this) {

             case PLUS:    return x + y;

             case MINUS:   return x - y;

             case TIMES:   return x * y;

             case DIVIDE: return x / y;

         }

         throw new AssertionError("Unknown op: " + this);

     }

}


它工作的非常好,當時如果沒有throw語句的話,它將不能通過編譯,因此它就顯得不是那么完美了。更加糟糕的是,你一定要記住在你向枚舉類中添加枚舉變量時,你要為這個變量添加操作。如果你忘了的話,eval方法將會操作失敗。


這里有另外一種給枚舉常量添加行為的方法。使用這種方法你可以避免上面說提到的問題。你可以在枚舉類型中添加一個abstract方法,然后在每一個枚舉常量中重載它。這就是有名的constant-specific方法。下面就是用這種技術對以前實例的重寫:

public enum Operation {

   PLUS    { double eval(double x, double y) { return x + y; } },

   MINUS   { double eval(double x, double y) { return x - y; } },

   TIMES   { double eval(double x, double y) { return x * y; } },

   DIVIDE { double eval(double x, double y) { return x / y; } };


   // Do arithmetic op represented by this constant

   abstract double eval(double x, double y);

   public static void main(String args[]) {

         double x = Double.parseDouble(args[0]);

         double y = Double.parseDouble(args[1]);

         for (Operation op : Operation.values())

             System.out.printf("%f %s %f = %f%n", x, op, y, op.eval(x, y));

     }

}

運行結果:
C:\java>java Operation 24 56
24.000000 PLUS 56.000000 = 80.000000
24.000000 MINUS 56.000000 = -32.000000
24.000000 TIMES 56.000000 = 1344.000000
24.000000 DIVIDE 56.000000 = 0.428571


大家可能會不太明白“PLUS    { double eval(double x, double y) { return x + y; } }”的意思。其實如果大家理解內部類的話,可能就不難理解這句話的含義了。我的理解是:

class MyenumOperation implements enumOperation

{

     double eval(double x, double y) { return x + y; }

}

MyenumOperation plus = new MyenumOperation();


與枚舉類型一起添加進來的還有enumsetenummap.

 

posted on 2009-06-15 11:22 肥仔 閱讀(307) 評論(0)  編輯 收藏 引用 所屬分類: Web-后臺

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美黄色成人网| 久久亚洲综合色| 国产精品国产三级国产普通话99 | 午夜精品福利视频| 一区二区国产日产| 亚洲一区久久久| 欧美一区二区网站| 欧美一区二区三区精品电影| 久久婷婷色综合| 亚洲国产三级| 亚洲国产精品毛片| 亚洲视频在线一区| 久久色在线播放| 欧美日本一区二区视频在线观看| 国产精品yjizz| 狠狠综合久久av一区二区小说| 亚洲黄色性网站| 亚洲综合电影| 久久综合影音| 9色国产精品| 久久综合国产精品| 国产精品久久夜| 亚洲国产高清视频| 午夜视黄欧洲亚洲| 亚洲国产三级在线| 欧美一区二区日韩一区二区| 女人天堂亚洲aⅴ在线观看| 国产精品久久久久一区二区三区共| 国产无一区二区| 午夜精品成人在线| 香蕉久久夜色| 亚洲电影免费观看高清完整版在线| 一本久道久久综合狠狠爱| 久久久99爱| 国产欧美日韩精品一区| 一本一本a久久| 欧美69视频| 久久福利电影| 国产欧美精品一区二区色综合 | 亚洲欧美日本另类| 欧美福利小视频| 午夜精品在线看| 欧美日韩亚洲一区二区三区| 亚洲第一中文字幕| 久久久精品国产免大香伊| 日韩小视频在线观看专区| 模特精品在线| 亚洲第一在线综合网站| 久久综合电影| 久久成人人人人精品欧| 国产精品区二区三区日本| 亚洲天堂av在线免费| 亚洲激情电影在线| 久久久久久亚洲精品杨幂换脸| 国产欧美精品在线播放| 午夜视频在线观看一区二区三区| 日韩视频免费观看高清完整版| 欧美激情2020午夜免费观看| 亚洲精品裸体| 亚洲人成绝费网站色www| 欧美高清视频| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 久久久久久一区| 欧美在线国产| 激情懂色av一区av二区av| 久久久久久久一区二区| 午夜久久久久久| 狠狠色狠狠色综合日日tαg| 欧美11—12娇小xxxx| 免费精品视频| 日韩午夜电影av| 中国成人黄色视屏| 国产欧美精品日韩精品| 噜噜噜噜噜久久久久久91| 久久久蜜桃一区二区人| 亚洲精品一区在线观看| 亚洲黄色三级| 国产精品麻豆va在线播放| 久久国产乱子精品免费女| 久久九九免费视频| 亚洲精品日本| 亚洲深夜福利在线| 韩日欧美一区二区| 亚洲国产天堂久久综合| 欧美亚男人的天堂| 久久精品最新地址| 久久一区中文字幕| 亚洲动漫精品| 国产毛片一区二区| 欧美成人久久| 国产精品久久波多野结衣| 久久久久久色| 欧美黑人多人双交| 欧美一区二区三区四区在线观看| 久久久精彩视频| 一区二区激情小说| 久久av一区二区三区漫画| 亚洲人在线视频| 欧美一区二区精品久久911| 亚洲精品国产精品国产自| 在线一区亚洲| 亚洲黄色影院| 午夜精品久久久久久久99樱桃| 在线精品一区二区| 亚洲一区国产| 99热在线精品观看| 久久精品国产清自在天天线| 一区二区三区视频在线播放| 久久精品免费观看| 午夜精品在线| 欧美日产国产成人免费图片| 蜜桃av噜噜一区二区三区| 国产精品另类一区| 亚洲欧洲在线看| 亚洲国产成人一区| 欧美在线视屏| 欧美亚洲三区| 欧美午夜视频| avtt综合网| 亚洲图片欧洲图片av| 欧美大片在线观看一区二区| 久久不射电影网| 国产精品麻豆成人av电影艾秋| 亚洲精品日韩欧美| 亚洲精品视频免费| 免费黄网站欧美| 欧美高潮视频| 亚洲欧洲日本国产| 久久影院午夜论| 久久精品国产成人| 国产精品一区二区a| 亚洲午夜久久久久久久久电影院| 亚洲少妇诱惑| 欧美性感一类影片在线播放 | 亚洲国产另类久久久精品极度| 欧美在线视屏| 老司机免费视频一区二区三区| 国产一区二区久久| 欧美在线观看一二区| 浪潮色综合久久天堂| 国内偷自视频区视频综合| 欧美亚洲尤物久久| 久久夜色精品国产欧美乱极品| 黄色一区二区在线观看| 久久久精品午夜少妇| 免费亚洲婷婷| 99av国产精品欲麻豆| 欧美久久一级| 亚洲午夜在线视频| 久久av在线| 这里只有精品视频| 久久久久www| 国产欧美日韩一区| 久久久久久国产精品mv| 美女黄网久久| 亚洲裸体俱乐部裸体舞表演av| 欧美日韩国产不卡在线看| 亚洲午夜精品一区二区三区他趣| 久久久久网址| 亚洲欧洲精品一区二区三区 | 国产又爽又黄的激情精品视频| 久久国产免费| 亚洲国产一区二区精品专区| 亚洲无线视频| 国模私拍视频一区| 欧美激情视频网站| 亚洲欧美成人| 亚洲第一毛片| 午夜亚洲影视| 亚洲国产三级网| 国产精品日韩久久久久| 久久麻豆一区二区| 亚洲国产精品va在线看黑人| 亚洲嫩草精品久久| 在线观看欧美日韩国产| 欧美日韩亚洲系列| 久久国产精品久久久久久| 亚洲国产专区校园欧美| 新片速递亚洲合集欧美合集| 亚洲激情一区二区| 国产欧亚日韩视频| 欧美精品福利视频| 久久大综合网| 一区二区三区高清| 欧美国产在线观看| 久久精品国产77777蜜臀| 一区二区三区国产盗摄| 影音先锋成人资源站| 欧美午夜免费| 欧美日韩国产bt| 美女诱惑黄网站一区| 欧美在线观看日本一区| 在线一区亚洲| 99国产精品一区| 亚洲国产视频一区二区| 麻豆精品一区二区av白丝在线| 亚洲欧美一区二区视频| 99亚洲一区二区| 亚洲精品九九| 亚洲黄网站黄|