Java基础笔记 – 枚举类型的使用介绍和静态导入
JDK5.0中加入了枚舉類型,使用enum關鍵字定義,可以按照如下定義:
public enum Weather{Sunny,Rainy,Cloudy, } 1.1、枚舉類型中的兩個靜態方法: values()獲取枚舉類型的所有枚舉常量 valueOf(Class<T> enumType, String name) 返回帶指定名稱的指定枚舉類型的枚舉常量。 1.2、values方法的使用: for(Weather weather : Weather.values()){System.out.println(weather); } System.out.println(Weather.valueOf(Weather.class, "Sunny")); 1.2、values方法的使用: for(Weather weather : Weather.values()){System.out.println(weather); } //以下輸出為Sunny System.out.println(Weather.valueOf(Weather.class, "Sunny")); 1.3、創建包含私有成員變量的枚舉常量: public enum Weather{Sunny("晴天"),Rainy("雨天"),Cloudy("多云");//私有成員變量,保存名稱private String value;public String getValue() {return value;}//帶參構造函數Weather(String value){this.value = value;} } public static void main(String[] args) {Weather weather1 = Weather.Sunny;//以下輸出為"晴天"System.out.println(weather1.getValue()); } 1.4、枚舉類型詳細說明:enum關鍵字的作用類似于class或interface,本質上是在定義一個類別,細節的實現由編譯器完成。
自定義的枚舉類型實質上繼承自java.lang.Enum抽象類。而每一個成員常量其實就是自己定義的枚舉類型的一個實例,都被定義為final,所有無法改變他們,另外他們是static,pulibc的,即:
public static final 枚舉常量;在運行期間我們無法再使用該枚舉類型創建新的實例,這些實例是在編譯期間就完全確定下來了的。
1.5、枚舉的比較: compareTo public final int compareTo(E o) 比較此枚舉與指定對象的順序。在該對象小于、等于或大于指定對象時,分別返回負整數、零或正整數。 枚舉常量只能與相同枚舉類型的其他枚舉常量進行比較。該方法實現的自然順序就是聲明常量的順序。 指定者: 接口 Comparable<E extends Enum<E>> 中的 compareTo 參數: o - 要比較的對象。 返回: 負整數、零或正整數,根據此對象是小于、等于還是大于指定對象。 Weather[] arrays = Weather.values(); for(Weather weather2 : arrays){System.out.println((Weather.Sunny).compareTo(weather2)); } 1.6、枚舉的相關方法: ordinal public final int ordinal() 返回枚舉常量的序數(它在枚舉聲明中的位置,其中初始常量序數為零)。 大多數程序員不會使用此方法。它被設計用于復雜的基于枚舉的數據結構,比如 EnumSet 和 EnumMap。 返回: 枚舉常量的序數 for(Weather weather2 : arrays){System.out.println(weather2.ordinal() + ":" + weather2); } 2、EnumSet: public abstract class EnumSet<E extends Enum<E>> extends AbstractSet<E> implements Cloneable, Serializable與枚舉類型一起使用的專用 Set 實現。枚舉 set 中所有鍵都必須來自單個枚舉類型,該枚舉類型在創建 set 時顯式或隱式地指定。枚舉 set 在內部表示為位向量。此表示形式非常緊湊且高效。此類的空間和時間性能應該很好,足以用作傳統上基于 int 的“位標志”的替換形式,具有高品質、類型安全的優勢。如果其參數也是一個枚舉 set,則批量操作(如 containsAll 和 retainAll)也應運行得非常快。
此類可以幫助我們建立枚舉值的集合,里面提供了一系列的靜態方法,可以指定不同的集合建立方式。
2.1、of方法 public static <E extends Enum<E>> EnumSet<E> of(E first,E... rest) 創建一個最初包含指定元素的枚舉 set。此工廠方法的參數列表使用變量參數功能,該方法可以創建一個最初包含任意個元素的枚舉 set,但是這樣很可能比不使用變量參數的重載運行得慢。 參數: first - 此 set 最初要包含的元素 rest - 此 set 最初要包含的其余元素 返回: 最初包含指定元素的枚舉 set 拋出: NullPointerException - 如果任意參數為 null,或 rest 為 null EnumSet<Weather> enumSet = EnumSet.of(Weather.Sunny, Weather.Rainy);for(Iterator<Weather> iter = enumSet.iterator(); iter.hasNext();){System.out.println(iter.next()); } 2.2、noneOf方法 public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) 創建一個具有指定元素類型的空枚舉 set。 參數: elementType - 此枚舉 set 的元素類型的 class 對象 拋出: NullPointerException - 如果 elementType 為 null EnumSet<Weather> enumSet2 = EnumSet.noneOf(Weather.class); enumSet2.add(Weather.Sunny); enumSet2.add(Weather.Rainy);for(Iterator<Weather> iter = enumSet2.iterator(); iter.hasNext();){System.out.println(iter.next()); } 3、List保存枚舉類型: List<Weather> list = new ArrayList<Weather>(); list.add(Weather.Sunny); list.add(Weather.Cloudy);for(Iterator<Weather> iter = list.iterator(); iter.hasNext();){System.out.println(iter.next()); } 4、EnumMap類: public class EnumMap<K extends Enum<K>,V>extends AbstractMap<K,V>implements Serializable, Cloneable與枚舉類型鍵一起使用的專用 Map 實現。枚舉映射中所有鍵都必須來自單個枚舉類型,該枚舉類型在創建映射時顯式或隱式地指定。枚舉映射在內部表示為數組。此表示形式非常緊湊且高效。
枚舉映射根據其鍵的自然順序 來維護(該順序是聲明枚舉常量的順序)。在 collection 視圖(keySet()、entrySet() 和 values())所返回的迭代器中反映了這一點。
EnumMap public EnumMap(Class<K> keyType) 創建一個具有指定鍵類型的空枚舉映射。 參數: keyType - 此枚舉映射的鍵類型的 class 對象 拋出: NullPointerException - 如果 keyType 為空 Map<Weather, String> enumMap = new EnumMap<Weather, String>(Weather.class); enumMap.put(Weather.Sunny, "晴天"); enumMap.put(Weather.Rainy, "雨天"); 5、枚舉在實際開發中的使用: public static String getString(Weather weather){if(weather == Weather.Sunny){return Weather.Sunny.getValue();} else if(weather == Weather.Rainy){return Weather.Rainy.getValue();} else if(weather == Weather.Cloudy){return Weather.Cloudy.getValue();}return "不符合的天氣情況"; }調用上面的方法:
Weather weather3 = Weather.Sunny; System.out.println(getString(weather3)); 6、靜態導入:如果要使用靜態變量或者方法,必須給出該方法所在的類。而使用靜態導入可以使被導入類的所有靜態變量和靜態方法在當前類直接可見,這樣就無需給出他們的類名了:
如加入以下導入語句:
import static java.util.EnumSet.noneOf;就可以直接使用這個靜態方法了:
EnumSet<Weather> enumSet2 = noneOf(Weather.class); enumSet2.add(Weather.Sunny); enumSet2.add(Weather.Rainy);總結
以上是生活随笔為你收集整理的Java基础笔记 – 枚举类型的使用介绍和静态导入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 枚举学习--从小程序中学习
- 下一篇: 如何招聘一个合格的程序员?