欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java枚舉如何運用?

黃文隆2年前18瀏覽0評論

謝謝邀請,下面介紹一下枚舉的用法

認識枚舉

枚舉就是要讓某個類型的變量的取值只能為若干個固定值中的一個,否則編譯器就會報錯,枚舉可以讓編譯器在編譯時就可以控制源程序賦給的非法值,使用普通變量的方式在開發(fā)階段無法實現(xiàn)這一目標.

在JDK1.5之后,使用關(guān)鍵字enum定義一種新的類型,稱為枚舉類型。

JDK1.5中可以在switch表達式中使用Enum定義的枚舉類的對象作為表達式,case子句可以直接使用枚舉值的名字,無需添加枚舉類作為限定

枚舉的定義

枚舉的類名建議帶上Enum后綴,枚舉成員需要全大寫,單詞間用下劃線隔開。

枚舉其實是特殊的常量類,且構(gòu)造方法被默認的強制私有。

正確的命名方式為:

ResultEnum的成員名稱為:SUCCESS/UNKNOWN_REASON。

定義規(guī)則如下:

  1. 私有化類的構(gòu)造器。

  2. 成員變量如果聲明為final。要在構(gòu)造器中初始化,不允許被修改、

  3. 通過公共方法調(diào)用屬性。

  4. 枚舉實例必須在前面

  5. 需要在枚舉實例后面加上分號,然后再寫構(gòu)造函數(shù)等。

  6. 枚舉類默認提供了values()方法,該方法可以很方便得遍歷所有的枚舉值

  7. 枚舉類對象可以有屬性

  8. 若枚舉類顯式的定義了帶參數(shù)的構(gòu)造器,則在列出枚舉值時也必須對應(yīng)的傳入?yún)?shù)

Enum類與enum關(guān)鍵字

使用enum關(guān)鍵字定義的枚舉類,實際上就想當于定義了一個類,此類繼承了Enum類而已

集合對枚舉的支持

集合對枚舉的支持,對于Set和Map接口而言又增加了兩個新的子類:EnumSet、EnumMap兩個類:

enum類基本用法

我們可以定義一個顏色的枚舉:

怎么調(diào)用呢,Javaswitch語句參數(shù)就支持enum類

帶構(gòu)造方法的枚舉

定義規(guī)則:

  1. 私有化類的構(gòu)造器

  2. 枚舉實例必須在前面

  3. 需要在枚舉實例后面加上分號,然后再寫構(gòu)造函數(shù)等

讓枚舉實現(xiàn)接口

枚舉類可以實現(xiàn)一個或多個接口。與普通類實現(xiàn)接口完全一樣,枚舉類實現(xiàn)接口時,需要實現(xiàn)該接口所包含的方法。

如果需要每個枚舉值在調(diào)用同一個方法時呈現(xiàn)不同的行為,則可以讓每個枚舉值在{...}匿名塊中實現(xiàn)自己的業(yè)務(wù)邏輯

在枚舉中定義抽象方法

enum類是很特殊的一個類,實際上它是一個抽象類。枚舉中可以用抽象方法,但是枚舉中的每一個對象都分別實現(xiàn)抽象方法;

枚舉實現(xiàn)單例類

1、借助JDK1.5添加的枚舉來實現(xiàn)單例模式。不僅能夠避免多線程同步問題,而且還能防止反序列化重新創(chuàng)建新的對象.

2、這種方式是EffectiveJava作者JoshBloch提倡的方式

enum類和常量的區(qū)別

這種方式在使用上跟枚舉沒有卻別,但是我們?yōu)槭裁催x擇枚舉呢?

(1)、類型不安全:因為上面的每個顏色實際上時一個int整數(shù),因此完全可以把一個顏色當成一個int整數(shù)使用,例如進行加法運算RED+GREEN,這樣代碼完全正常

(2)、沒有命名空間:當需要使用顏色時,必須在前面加上COLOR_前綴,否則程序可能與其他類中的靜態(tài)常量混淆

。(3)、打印輸出的意義不明確:當輸出某個季節(jié)時,例如輸出COLOR_RED,實際上輸出的是1,這個1很難猜測它代表了紅色.

(4)不容易擴展,每一個key對應(yīng)一個值,

枚舉類與普通類區(qū)別

  • 使用enum定義的枚舉類默認繼承了java.lang.Enum類

  • 枚舉類的構(gòu)造器只能使用private訪問控制符
  • 枚舉類的所有實例必須在枚舉類中顯式列出(,分隔;結(jié)尾).列出的實例系統(tǒng)會自動添加publicstaticfinal修飾

Enum枚舉類主要方法

  1. values()方法:返回枚舉類型的對象數(shù)組。該方法可以很方便地遍歷所有的枚舉值。

  2. valueOf(Stringstr):可以把一個字符串轉(zhuǎn)為對應(yīng)的枚舉類對象。要求字符串必須是枚舉類對象的“名字”。如不是,會有運行時異常。