您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Java枚舉案例分析”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java枚舉案例分析”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
枚舉就是要讓某個類型的變量的取值只能為若干個固定值中的一個,否則編譯器就會報錯,枚舉可以讓編譯器在編譯時就可以控制源程序賦給的非法值,使用普通變量的方式在開發階段無法實現這一目標。
在JDK1.5之后,使用關鍵字enum定義一種新的類型,稱為枚舉類型
枚舉(enum)和類(class)、接口(interface)是同一級別
定義一個color,只能定義紅、綠、藍三種顏色
普通方法
那么如何解決這種問題,讓color只能在三種顏色中選一種???
使用enum關鍵字定義的枚舉類,實際上就相當于定義了一個類,此類繼承課Enum類而已。
public enum Color { RED, GREEN, BLUE;}
protected Enum(String name,int ordinal)
此構造方法不能被外部直接調用,只能被其子類訪問,此構造方法為自動調用public final String name()
返回枚舉的名字public String toString()
返回枚舉的名字public final int ordinal()
返回枚舉的序號,默認從0開始public final boolean equals(Object other)
判斷兩個枚舉是否相同
代碼
public class EnumTest { public static void main(String[] args) { //定義一個color變量,只能設置為RED、GREEN、BLUE Color color = Color.BLUE; System.out.println(color); System.out.println(color.name()); System.out.println(color.toString());//三種方式都是打印名字 System.out.println(color.ordinal());//返回枚舉的序號RED--0、GREEN--1、BLUE--2 Color[] values = Color.values();//返回所有枚舉類型 System.out.println(Arrays.toString(values)); }}
枚舉的本質是一個繼承Enum類的子類,JVM編譯器把枚舉編譯后生成一個
final class
枚舉不允許從外部調用,所以只能是private修飾
構造方法只能在對象中調用
public enum Color { RED(10), GREEN(20), BLUE; private int Number;//屬性 private Color() {//默認構造方法 System.out.println("無參構造器被調用了!!!"); } private Color(int Number) { this.Number = Number; System.out.println("有參構造器被調用了!!!"); } public int getNumber(){ return Number; }}
主方法
public class EnumTest { public static void main(String[] args) { Color color = Color.RED; System.out.println(color.name()); System.out.println(color.getNumber());//獲取Number的值 }}
在枚舉類型中,可以繼承接口,實現接口有兩種方法,要么在枚舉類中實現該方法,或者在對象內部實現該方法
方式1:在枚舉對象內部實現接口中的方法
interface info{ public String getColor();}public enum Color implements info{ RED{ @Override public String getColor() {return "紅色";} }, GREEN{ @Override public String getColor() {return "綠色";} }, BLUE{ @Override public String getColor() {return "藍色";} };}
方式2:在枚舉類中實現接口中的方法
interface info{ public String getColor();}public enum Color implements info{ RED,GREEN,BLUE; @Override public String getColor() { return null; }}
主方法
public class EnumTest { public static void main(String[] args) { Color color = Color.RED; System.out.println(color.getColor()); }}
在枚舉類型中,可以定義抽象方法,具體由對象實現
枚舉類
public enum Color { RED{ @Override public String getColor() {return "紅色";} }, GREEN{ @Override public String getColor() {return "綠色";} }, BLUE{ @Override public String getColor() {return "藍色";} }; //在枚舉中定義一個抽象方法,通過枚舉對象實現 public abstract String getColor();}
主方法
public class EnumTest { public static void main(String[] args) { Color color = Color.BLUE; System.out.println(color.getColor()); }}
枚舉是用來保證數據在指定范圍內的值,如果枚舉中只有一個類型(一個值)的話,枚舉中就只有一個對象,那么就可以實現單例模式。
枚舉類
public enum Singletion { SINGLETION; public void Method(){ System.out.println("使用枚舉實現單例模式!!!"); }}
主方法
public class EnumTest { public static void main(String[] args) { Singletion singletion=Singletion.SINGLETION; singletion.Method(); }}
在JDK1.5之后,對于Set和Map接口而言又增加了兩個新的子類:
EnumSet
和EnumMap
兩個子類
一個專門
Set
實現與枚舉類型一起使用。 枚舉集中的所有元素都必須來自創建集合時明確或隱式指定的單個枚舉類型EnumSet
是一個抽象類,不能直接創建實例對象,但是可以通過方法來使用。
EnumSet.allOf(Class<E> elementType)
把一個枚舉類型全部填充到集合中去public static <E extends Enum<E>> EnumSet<E> complementOf(EnumSet<E> s)
創建與指定枚舉集具有相同元素類型的枚舉集,最初包含此類型的所有元素,該元素 不包含在指定的集合中。public static <E extends Enum<E>> EnumSet<E> copyOf(EnumSet<E> s)
創建與指定的枚舉集相同的元素類型的枚舉集,最初包含相同的元素(如果有)
代碼
import java.util.EnumSet;public class EnumTest { public static void main(String[] args) { EnumSet<Color> set = EnumSet.allOf(Color.class);//把一個枚舉類型全部填充到集合中去 for (Color c : set) { System.out.println(c.name()); } }}
EnumMap
一個專門Map實現與枚舉類型鍵一起使用。 枚舉映射中的所有密鑰必須來自創建映射時明確或隱式指定的單個枚舉類型。 枚舉地圖在內部表示為數組。 這種表示非常緊湊和高效。
代碼
import java.util.EnumMap;public class EnumTest { public static void main(String[] args) { EnumMap<Color, String> map = new EnumMap<>(Color.class); map.put(Color.RED, "紅色"); map.put(Color.GREEN, "綠色"); map.put(Color.BLUE, "藍色"); System.out.println(map.get(Color.RED)); }
讀到這里,這篇“Java枚舉案例分析”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。