標籤:java新特性之枚舉
一、多例模式
多例模式實現方式一
package cn4;public class MultiInstance {//提供有限個執行個體化對象public static final MultiInstance FRONT = new MultiInstance();public static final MultiInstance BEHIND = new MultiInstance();public static final MultiInstance LEFT = new MultiInstance();public static final MultiInstance RIGHT = new MultiInstance();//構造方法私人化private MultiInstance(){}}package cn4;public class Test {public static void main(String[] args) {MultiInstance front = MultiInstance.FRONT;MultiInstance behind = MultiInstance.BEHIND;MultiInstance left = MultiInstance.LEFT;MultiInstance right = MultiInstance.RIGHT;System.out.println(front);System.out.println(behind);System.out.println(left);System.out.println(right);}}
[email protected]
[email protected]
[email protected]
[email protected]
多例模式實現方式二
package cn4;public class MultiInstance2 {//提供有限個執行個體化對象public static final MultiInstance2 FRONT = new MultiInstance2("前");public static final MultiInstance2 BEHIND = new MultiInstance2("後");public static final MultiInstance2 LEFT = new MultiInstance2("左");public static final MultiInstance2 RIGHT = new MultiInstance2("右");private String name;//構造方法私人化private MultiInstance2(String name){this.name = name;}public String getName(){return this.name;}}package cn4;public class Test2 {public static void main(String[] args) {MultiInstance2 front = MultiInstance2.FRONT;MultiInstance2 behind = MultiInstance2.BEHIND;MultiInstance2 left = MultiInstance2.LEFT;MultiInstance2 right = MultiInstance2.RIGHT;System.out.println(front);System.out.println(behind);System.out.println(left);System.out.println(right);System.out.println(front.getName());System.out.println(behind.getName());System.out.println(left.getName());System.out.println(right.getName());}}
[email protected]
[email protected]
[email protected]
[email protected]
前
後
左
右
多例模式實現方式三
package cn4;public abstract class MultiInstance3 {//提供有限個執行個體化對象public static final MultiInstance3 FRONT = new MultiInstance3("前"){@Overridepublic void show() {System.out.println("這是前面哦");}};public static final MultiInstance3 BEHIND = new MultiInstance3("後"){@Overridepublic void show() {System.out.println("這是後面哦");}};public static final MultiInstance3 LEFT = new MultiInstance3("左"){@Overridepublic void show() {System.out.println("左這是邊哦");}};public static final MultiInstance3 RIGHT = new MultiInstance3("右"){@Overridepublic void show() {System.out.println("這是後邊哦");}};private String name;//構造方法私人化private MultiInstance3(String name){this.name = name;}public String getName(){return this.name;}public abstract void show();}package cn4;public class Test3 {public static void main(String[] args) {MultiInstance3 front = MultiInstance3.FRONT;MultiInstance3 behind = MultiInstance3.BEHIND;MultiInstance3 left = MultiInstance3.LEFT;MultiInstance3 right = MultiInstance3.RIGHT;System.out.println(front);System.out.println(behind);System.out.println(left);System.out.println(right);System.out.println(front.getName());System.out.println(behind.getName());System.out.println(left.getName());System.out.println(right.getName());front.show();behind.show();left.show();right.show();}}
[email protected]
[email protected]
[email protected]
[email protected]
前
後
左
右
這是前面哦
這是後面哦
左這是邊哦
這是後邊哦
但是如果我們寫多例模式也這樣實在是太麻煩了。jdk為我們提供了枚舉。
根據多例模式實現一對應的枚舉一
package cn4;public enum Color {RED,GREEN,BLUE;}package cn4;public class ColorTest1 {public static void main(String[] args) {Color red = Color.RED;Color green = Color.GREEN;Color blue = Color.BLUE;System.out.println(red);System.out.println(green);System.out.println(blue);}}
RED
GREEN
BLUE
根據多例模式實現二對應的枚舉二
package cn4;public enum Color2 {RED("紅"),GREEN("綠"),BLUE("藍");private String name;private Color2(String name){this.name = name;}public String getName(){return this.name;}}package cn4;public class ColorTest2 {public static void main(String[] args) {Color2 red = Color2.RED;Color2 green = Color2.GREEN;Color2 blue = Color2.BLUE;System.out.println(red);System.out.println(green);System.out.println(blue);System.out.println(red.getName());System.out.println(green.getName());System.out.println(blue.getName());}}
RED
GREEN
BLUE
紅
綠
藍
根據多例模式實現三對應的枚舉三
package cn4;public enum Color3 {RED("紅"){@Overridepublic void show() {System.out.println("這是紅色");}},GREEN("綠"){@Overridepublic void show() {System.out.println("這是綠色");}},BLUE("藍"){@Overridepublic void show() {System.out.println("這是藍色");}};private String name;private Color3(String name){this.name = name;}public String getName(){return this.name;}public abstract void show();}
RED
GREEN
BLUE
紅
綠
藍
這是紅色
這是綠色
這是藍色
二、枚舉的注意事項
定義枚舉類要用關鍵字enum。
所有枚舉類密度是Enumerate的子類。
枚舉類的第一行上必須是枚舉項,最後一個枚舉項後的分號是可以省略的,但是如果枚舉類有其他的東西,這個分號就不能省略。建議不要省略。
枚舉類可以有構造器,但必須是private的,它預設的也是private的。枚舉項的用法比較特殊:枚舉(“”)。
枚舉類也可以有抽象方法,但是枚舉項必須重寫該方法。
枚舉可以在switch語句中的使用。
三、枚舉類的幾個常用方法
int compareTo(E o)
String name()
int ordinal()
String toString()
<T> T valueOf(Class<T> type,String name)
values()
此方法雖然在JDK文檔中尋找不到,但每個枚舉類都具有該方法,它遍曆枚舉類的所有枚舉值非常方便
package cn4;public enum Color {RED,GREEN,BLUE;}
package cn4;public class ColorDemo {public static void main(String[] args) {//int compareTo(E o) 比較此枚舉與指定對象的順序Color red = Color.RED;Color green = Color.GREEN;Color blue = Color.BLUE;System.out.println(red.compareTo(red));//0System.out.println(red.compareTo(green));//-1System.out.println(blue.compareTo(red));//2System.out.println("-------------------------");//String name() 返回此枚舉常量的名稱,在其枚舉聲明中對其進行聲明。System.out.println(Color2.RED.name());//REDSystem.out.println(Color2.GREEN.name());//GREENSystem.out.println(Color2.BLUE.name());//BLUESystem.out.println("-------------------------");//int ordinal() 返回枚舉常量的序數System.out.println(Color3.RED.ordinal());//0System.out.println(Color3.GREEN.ordinal());//1System.out.println(Color3.BLUE.ordinal());//2System.out.println("-------------------------");//String toString() 返回枚舉常量的名稱System.out.println(Color3.RED.toString());//REDSystem.out.println(Color3.GREEN.toString());//GREENSystem.out.println(Color3.BLUE.toString());//BLUESystem.out.println("-------------------------");//<T> T valueOf(Class<T> type,String name) 返回帶指定名稱的指定枚舉類型的枚舉常量Color color = Enum.valueOf(Color.class, "RED");System.out.println(color);//REDSystem.out.println("-------------------------");//values() 擷取指定枚舉類的枚舉數組Color[] colors = Color.values();for (Color c : colors) {System.out.println(c);//RED GREEN BLUE}}}
0
-1
2
-------------------------
RED
GREEN
BLUE
-------------------------
0
1
2
-------------------------
RED
GREEN
BLUE
-------------------------
RED
-------------------------
RED
GREEN
BLUE
本文出自 “11831428” 部落格,請務必保留此出處http://11841428.blog.51cto.com/11831428/1878429
java新特性之枚舉