本篇文章為大家帶來了關於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
建構方法只能在物件中調用
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)</e>
把一个枚举类型全部填充到集合中去public static <e extends enum>> EnumSet<e> complementOf(EnumSet<e> s)</e></e></e>
创建与指定枚举集具有相同元素类型的枚举集,最初包含此类型的所有元素,该元素 不包含在指定的集合中。public static <e extends enum>> EnumSet<e> copyOf(EnumSet<e> s)</e></e></e>
创建与指定的枚举集相同的元素类型的枚举集,最初包含相同的元素(如果有)
代码
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()); } }}</color>
EnumMap
一个专门Map实现与枚举类型键一起使用。 枚举映射中的所有密钥必须来自创建映射时明确或隐式指定的单个枚举类型。 枚举地图在内部表示为数组。 这种表示非常紧凑和高效。
代码
import java.util.EnumMap;public class EnumTest { public static void main(String[] args) { EnumMap<color> map = new EnumMap(Color.class); map.put(Color.RED, "红色"); map.put(Color.GREEN, "绿色"); map.put(Color.BLUE, "蓝色"); System.out.println(map.get(Color.RED)); }</color>
推荐学习:《java视频教程》
以上是Java基礎歸納之枚舉的詳細內容。更多資訊請關注PHP中文網其他相關文章!