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

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>
            欧美**字幕| 午夜精品久久久久影视| 亚洲精品专区| 91久久国产自产拍夜夜嗨| 国产亚洲欧美日韩日本| 国产精品日韩精品| 国产精品亚洲美女av网站| 欧美日韩在线播| 国产精品久久久久毛片大屁完整版 | 亚洲欧洲日本mm| 欧美成人免费在线| 亚洲尤物精选| 国产精品99久久久久久久女警| 国产精品久久久久久久久搜平片| 欧美日韩精品综合在线| 国产三级精品在线不卡| 亚洲精品视频一区二区三区| 亚洲欧美日韩在线一区| 久久不射中文字幕| 欧美激情视频在线播放| 欧美一区=区| 国产美女搞久久| 一区二区国产精品| 久久久av水蜜桃| 在线欧美日韩| 狠狠色综合播放一区二区| 一本色道精品久久一区二区三区| 亚洲少妇中出一区| 国产欧美一区二区三区另类精品 | 一本色道久久综合亚洲精品不| 亚洲国产电影| 一本在线高清不卡dvd| 国产亚洲精品v| 亚洲精品欧美极品| 久久福利资源站| 日韩视频一区二区在线观看 | 国产精品久久国产愉拍 | 国产乱码精品一区二区三区忘忧草 | 亚洲精品永久免费| 久久亚洲欧洲| 国产一区二区三区丝袜| 亚洲愉拍自拍另类高清精品| 欧美激情亚洲国产| 欧美在线亚洲一区| 亚洲激情视频网| 久久免费99精品久久久久久| 国产精品日韩在线播放| 一区二区三区国产盗摄| 欧美激情视频在线免费观看 欧美视频免费一 | 亚洲高清资源| 久久人人精品| 性欧美精品高清| 国产精品你懂的在线欣赏| 日韩午夜在线| 亚洲青色在线| 欧美激情综合网| 亚洲人成在线观看| 亚洲国产岛国毛片在线| 欧美成人午夜77777| 亚洲国产日韩欧美综合久久| 免费欧美视频| 欧美成年人视频网站欧美| 在线观看视频免费一区二区三区| 久久久久国产精品午夜一区| 午夜精品国产精品大乳美女| 国产女主播一区二区三区| 欧美在线视频a| 香蕉尹人综合在线观看| 国产在线高清精品| 蜜桃伊人久久| 免费高清在线一区| 亚洲精品一二三区| 亚洲精一区二区三区| 欧美日本一区二区三区| 亚洲最新视频在线| 亚洲视频一二| 国产欧美一区二区三区视频| 久久免费精品视频| 欧美刺激午夜性久久久久久久| 日韩视频免费观看高清在线视频| 91久久国产综合久久| 国产精品美女久久久久久免费| 性做久久久久久久免费看| 欧美在线视屏| av成人动漫| 午夜在线精品偷拍| 亚洲电影免费| 99视频一区| 红桃视频成人| 夜夜精品视频一区二区| 国产一区亚洲| 亚洲日本无吗高清不卡| 国产美女精品在线| 欧美黑人多人双交| 国产精品国产三级国产普通话99| 久久精品成人欧美大片古装| 男人插女人欧美| 午夜天堂精品久久久久| 免费日韩av片| 久久久精品欧美丰满| 欧美精品综合| 久久精品夜夜夜夜久久| 欧美精品18| 久久在线精品| 亚洲欧美一区二区三区极速播放| 黄色成人av在线| 99在线精品视频在线观看| 国产自产高清不卡| 亚洲视频自拍偷拍| 亚洲精品免费观看| 欧美一级在线亚洲天堂| 亚洲一区二区三区777| 久色成人在线| 久久久久女教师免费一区| 欧美亚州在线观看| 亚洲激情视频在线| 樱桃国产成人精品视频| 亚洲欧美另类国产| 亚洲一区在线观看免费观看电影高清| 久久精品国产久精国产思思| 亚洲性感美女99在线| 欧美国产日韩视频| 欧美成人一区二区三区片免费| 国产专区综合网| 午夜电影亚洲| 欧美一区二区三区四区在线观看 | 欧美高清在线精品一区| 久久精品亚洲国产奇米99| 欧美午夜在线| 日韩视频在线观看国产| 亚洲高清视频在线观看| 欧美在线一区二区| 久久成人免费网| 国产精品九色蝌蚪自拍| 一区二区三区导航| 一区二区三区蜜桃网| 欧美www视频在线观看| 蜜桃久久精品乱码一区二区| 欲香欲色天天天综合和网| 午夜视频一区在线观看| 午夜一区在线| 国产精品午夜电影| 国产精品99久久久久久久久| 狂野欧美激情性xxxx| 欧美成人dvd在线视频| 在线看视频不卡| 欧美肥婆bbw| 亚洲第一网站| 一本色道久久综合亚洲精品不卡 | 亚洲三级影片| 一区二区三区四区在线| 99精品福利视频| 亚洲制服av| 欧美色大人视频| 亚洲午夜电影在线观看| 久久国产精品色婷婷| 国内视频一区| 美女视频黄a大片欧美| 亚洲成人在线视频播放 | 久久av二区| 久久久久久高潮国产精品视| 亚洲欧美激情视频在线观看一区二区三区| 亚洲免费网站| 国产精自产拍久久久久久| 午夜日韩福利| 亚洲国产你懂的| 亚洲一级二级| 国产无遮挡一区二区三区毛片日本| 久久激情综合| 亚洲欧洲日产国产网站| 午夜精品久久99蜜桃的功能介绍| 国产一二三精品| 美女脱光内衣内裤视频久久网站| 免费视频一区二区三区在线观看| aa亚洲婷婷| 国模叶桐国产精品一区| 欧美激情久久久久久| 一区二区三区四区五区精品| 久久视频国产精品免费视频在线| 亚洲精品欧美日韩专区| 国产精品天美传媒入口| 午夜精品久久久久99热蜜桃导演| 欧美激情一区二区三区全黄| 亚洲欧美在线x视频| 韩国精品在线观看| 国产精品福利在线观看网址| 免费观看成人鲁鲁鲁鲁鲁视频 | 久久久久久久一区二区三区| 亚洲日韩成人| 在线看片一区| 国产欧美日韩91| 欧美日韩影院| 欧美精品二区| 老司机免费视频久久| 欧美一区二区精品久久911| 一区二区三区久久| 亚洲人成亚洲人成在线观看图片| 久久久久久欧美| 欧美夜福利tv在线| 亚洲一区二区四区|