程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java 1.5新特性Enum的用法

Java 1.5新特性Enum的用法

編輯:關於JAVA

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;
}
}
}

輸出結果是:

absoluteZerois:-459

freezingis:32

boilingis:212

paperBurnsis:451

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved