枚舉類型可以取代以往常量的定義方式,即將常量封裝在類或接口中。此外,枚舉類型還提供了安全檢查功能。枚舉類型本質(zhì)上還是以類的形式存在。
1、使用枚舉類型設(shè)置常量
以往設(shè)置常量,通常將常量放置在接口中,這樣在程序中就可以直接使用了,并且該常量不能被修改,因為在接口中定義的常量時,該常量的修飾符為final與static。
public interface Constants public static final int RED = 1; public static final int BLUE = 2; public static final int GREEN = 3;
使用枚舉定義常量的語法如下:
命名規(guī)范:
final常量:使用大寫字母命名,并且中間使用下劃線進行連接。
enum枚舉:使用大寫字母命名,并且中間使用下劃線進行連接。
示例:枚舉類型的使用。
public static void doit(ColorEnum c) System.out.println("This is RED"); System.out.println("This is BLUE"); System.out.println("This is GREEN"); public static void main(String[] args)
2、深入了解枚舉類型
枚舉類型較傳統(tǒng)定義常量的方式,除了具有參數(shù)類型檢測的優(yōu)勢之外,還具有其他方面的優(yōu)勢。
2.1 操作枚舉類型成員的方法
用戶可以將一個枚舉類型看作是一個類,它繼承于java.lang.Enum類,當(dāng)定義一個枚舉類型時,每一個枚舉類型成員都可以看作是枚舉類型的一個實例,這些枚舉類型成員默認(rèn)都被final、public、static所修飾,所以當(dāng)使用枚舉類型成員時直接使用枚舉類型名稱調(diào)用枚舉類型成員即可。
由于枚舉類型對象繼承與java.lang.Enum類,所以該類中一些操作枚舉類型的方法都可以應(yīng)用到枚舉型中。
枚舉類型的常用方法:
方法名稱 |
具體含義 |
使用方法 |
---|
values() |
該方法可以將枚舉類型成員以數(shù)組的形式返回 |
枚舉類型名稱.values() |
valueOf() |
該方法可以實現(xiàn)將普通字符串轉(zhuǎn)換為枚舉實例 |
枚舉類型名稱.valueOf("ABC") |
compareTo() |
該方法用于比較兩個枚舉對象在定義時的順序 |
枚舉對象.compareTo() |
ordinal() |
該方法用于得到枚舉成員的位置索引 |
枚舉對象.ordinal() |
(1)values()方法
該方法可以將枚舉類型成員以數(shù)組的形式返回,也可以通過該方法獲取枚舉類型的成員。
示例:使用枚舉類型中的values()方法獲取枚舉類型中的成員變量。
* 使用枚舉類型中的values()方法獲取枚舉類型中的成員變量 // 循環(huán)由values()方法返回的數(shù)組 public static void main(String[] args) System.out.println("方式一:"); for (int i = 0; i < ColorEnum.values().length; i++) System.out.println("枚舉類型成員變量:" + ColorEnum.values()[i]); System.out.println("方式二:"); for (ColorEnum c : ColorEnum.values()) System.out.println("枚舉類型成員變量:" + c);
執(zhí)行結(jié)果:

(2)valueOf()與compareTo()方法
枚舉類型中靜態(tài)方法valueOf()可以實現(xiàn)將普通字符串轉(zhuǎn)換為枚舉實例,而compareTo()方法用于比較兩個枚舉對象在定義時的順序。
示例:枚舉中valueOf()與compareTo()方法的使用。
* 枚舉中valueOf()與compareTo()方法的使用 public class EnumMethodTest // 定義比較枚舉類型方法,參數(shù)類型為枚舉類型 public static void compare(ColorEnum c) // 根據(jù)values()方法返回的數(shù)組做循環(huán)操作 for (int i = 0; i < ColorEnum.values().length; i++) System.out.println(c + "與" + ColorEnum.values()[i] + "的比較結(jié)果為:" + c.compareTo(ColorEnum.values()[i])); public static void main(String[] args) // 使用valueOf()將字符串轉(zhuǎn)換為枚舉實例 ColorEnum c = ColorEnum.valueOf("BLUE");
執(zhí)行結(jié)果:

說明:調(diào)用compareTo()方法返回的結(jié)果,正值代表方法中的參數(shù)在調(diào)用該方法的枚舉對象位置之前;0代表兩個相互比較的枚舉成員的位置相同;負(fù)值代表方法中參數(shù)在調(diào)用該方法的枚舉對象位置之后。
(3)ordinal()方法
該方法用于得到枚舉成員的位置索引。
示例:枚舉中ordinal()方法的使用。
public class EnumOrdinalTest public static void main(String[] args) for (int i = 0; i < ColorEnum.values().length; i++) // 在循環(huán)中獲取枚舉類型成員的索引位置 System.out.println(ColorEnum.values()[i] + "在枚舉類型中位置索引值" + ColorEnum.values()[i].ordinal());
執(zhí)行結(jié)果:

2.2 枚舉類型中的構(gòu)造方法
在枚舉類型中,可以添加構(gòu)造方法,但是規(guī)定這個構(gòu)造方法必須為private修飾符修飾。
示例:在枚舉類型中,可以添加構(gòu)造方法。
public class EnumIndexTest RED(1, "我是紅色"), BLUE(2, "我是藍色"), GREEN(3, "我是綠色"); private final String description; private ColorEnum(int value, String description) this.description = description; public String getDescription() public static ColorEnum valueOf(int value) public static void main(String[] args) for (ColorEnum c : ColorEnum.values()) System.out.println("枚舉成員:" + c + " 值:" + c.getValue() + " 描述:" + c.getDescription()); System.out.println("值轉(zhuǎn)換成枚舉:" + ColorEnum.valueOf(2)); System.out.println("字符串轉(zhuǎn)換成枚舉:" + ColorEnum.valueOf("GREEN"));
執(zhí)行結(jié)果:

2.3 枚舉中實現(xiàn)接口
除了可以使用上述示例的方法定義getDescription()方法獲取枚舉類型成員變量是的描述之外,還可以將這個getDescription()方法放置在接口中,使枚舉類型實現(xiàn)接口,然后使每個枚舉類型實現(xiàn)接口中的方法。
示例:在項目中創(chuàng)建d接口和枚舉類型的AnyEnum類,在枚舉類型AnyEnum類中實現(xiàn)帶方法的接口,使每個枚舉類型成員實現(xiàn)該接口中的方法。
public String getDescription(); public enum AnyEnum implements d public String getDescription() public String getDescription() public String getDescription() public static void main(String[] args) for (AnyEnum c : AnyEnum.values()) System.out.println("枚舉成員:" + c + " 值:" + c.getValue() + " 描述:" + c.getDescription());
執(zhí)行結(jié)果:

3、使用枚舉類型的優(yōu)勢
枚舉類型聲明提供了一種用戶友好的變量定義方法,枚舉了某種數(shù)據(jù)類型所有可能出現(xiàn)的值。總結(jié)枚舉類型,它具有以下特點:
(1)類型安全。
(2)緊湊有效的數(shù)據(jù)定義。
(3)可以和程序其他部分完美交互。
(4)運行效率高。
|