java新特性之枚舉

來源:互聯網
上載者:User

標籤: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新特性之枚舉

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.