隨筆-6  評論-38  文章-40  trackbacks-0
          Enum是enumeration(列舉)的簡寫形式,包含在java.lang包中.熟悉C, C++, C#, 或 Pascal人應該對列舉有所了解,先看個例子:

          public enum Season { winter, spring, summer, fall }

          ?

          一個enum是定義一組值的對象,它可以包括零個或多個值成員.它是屬于enum類型的,一個enum對象中不可有兩個或多個相同的屬性或值.在次之前的java程序員一般是 用接口的方法實現列舉的,如 :

          public interface Season {

          ?? static winter = 0;

          ?? static spring = 1; //etc..

          }

          引入了enum的java的列舉的編寫方便了許多,只須定義一個enum型的對象.enum對象的值都回自動獲得一個數字值,從0開始,依次遞增.看一個比較簡單的enum實現的例子:

          EnumDemo.java

          package net.javagarage.enums;

          ?

          /*

          We can loop over the values we put into the enum

          using the values() method.

          Note that the enum Seasons is compiled into a

          separate unit, called EnumDemo$Seasons.class

          */

          public class EnumDemo {

          ?

          ????? /*declare the enum and add values to it. note that, like in C#, we don't use a ; to

          ?end this statement and we use commas to separate the values */

          ?

          ????? private enum Seasons { winter, spring,

          ?????? summer, fall }

          ?

          ????? //list the values

          ????? public static void main(String[] args) {

          ??????????? for (Seasons s : Seasons.values()){

          ????????????????? System.out.println(s);

          ??????????? }

          ????? }

          ?

          }
          運行上述代碼你回得到 以下結果:

          winter

          spring

          summer

          fall

          Enum的屬性調用:

          下面的代碼展示了調用enum對象的方法,這也是它通常的用法:

          package net.javagarage.enums;

          /*

          File: EnumSwitch.java

          Purpose: show how to switch against the values in an enum.

          */

          ?

          public class EnumSwitch {

          ?

          ????? private enum Color { red, blue, green }

          ?

          ????? //list the values

          ????? public static void main(String[] args) {

          ??????????? //refer to the qualified value

          ??????????? doIt(Color.red);

          ?

          ????? }

          ?

          ????? /*note that you switch against the UNQUALIFIED name. that is, "case Color.red:" is a

          ?compiler error */

          ?

          ????? private static void doIt(Color c){

          ?

          ????? switch (c) {

          ????? case red:

          ??????????? System.out.println("value is " + Color.red);

          ??????????? break;

          ????? case green:

          ??????????? System.out.println("value is " + Color.green);

          ??????????? break;

          ????? case blue:

          ??????????? System.out.println("value is : " + Color.blue);

          ??????????? break;

          ????? default :

          ??????????? System.out.println("default");

          ????? }

          ????? }
          }

          為enums添加屬性和方法

          enums也可以象一般的類一樣添加方法和屬性,你可以為它添加靜態和非靜態的屬性或方法,這一切都象你在一般的類中做的那樣.

          package net.javagarage.enums;

          ?

          /*

          File: EnumDemo.java

          Purpose: show how to use an enum that also defines its own fields and methods

          */

          ?

          public class EnumWithMethods {

          ?

          //declare the enum and add values to it.

          ?

          public enum Season {

          ?

          ????? winter, spring, summer, fall;

          ?

          ????? private final static String location = "Phoenix";

          ?

          ????? public static Season getBest(){

          ??????????? if (location.equals("Phoenix"))

          ????????????????? return winter;

          ??????????? else

          ????????????????? return summer;

          ?

          ????? }

          ?

          ????? public static void main(String[] args) {

          ?

          ????? System.out.println(Season.getBest());

          ????? }

          }

          就是這么的簡單.但是有一點是需要注意的,那就是enums的值列表必須緊跟在enum聲明,不然編譯時將會出錯.

          Enums構造函數:

          和類一樣enums也可以有自己的構造函數,如下:

          package net.javagarage.enums;

          ?

          public class EnumConstructor {

          ?

          ????? public static void main(String[] a) {

          ?

          ??????????? //call our enum using the values method

          ??????????? for (Temp t : Temp.values())

          ????????????????? System.out.println(t + " is : " + t.getValue());

          ????? }

          ?

          ????? //make the enum

          ????? public enum Temp {

          ??????????? absoluteZero(-459), freezing(32),

          ??????????? boiling(212), paperBurns(451);

          ?

          ????? //constructor here

          ????? Temp(int value) {

          ??????????? this.value = value;

          ????? }

          ?

          ????? //regular field?but make it final,

          ????? //since that is the point, to make constants

          ????? private final int value;

          ?

          ????? //regular get method

          ????? public int getValue() {

          ????? return value;

          ????? }

          ?

          ????? }

          }
          輸出結果是:

          absoluteZero is : -459

          freezing is : 32

          boiling is : 212

          paperBurns is : 451

          盡管enums有這么多的屬性,但并不是用的越多越好,如果那樣還不如直接用類來的直接.enums的優勢在定義int最終變量僅當這些值有一定特殊含義時.但是如果你需要的是一個類,就定義一個類,而不是enum.

          posted on 2006-11-26 16:18 一手的小窩窩 閱讀(284) 評論(0)  編輯  收藏 所屬分類: JAVA
          主站蜘蛛池模板: 梓潼县| 栾川县| 山东| 大邑县| 乐昌市| 浦江县| 玉门市| 航空| 舒兰市| 婺源县| 英山县| 陆良县| 荥经县| 乃东县| 雷山县| 台中市| 唐海县| 万山特区| 蚌埠市| 鄂托克旗| 恭城| 登封市| 博客| 景德镇市| 梅河口市| 梁平县| 偏关县| 自贡市| 乐亭县| 海伦市| 广水市| 商南县| 正镶白旗| 栖霞市| 筠连县| 黄平县| 万源市| 浦县| 商南县| 龙州县| 黄冈市|