首頁>Club>
9
回覆列表
  • 1 # TwilightSun

    可以理解為下拉框裡的選項,讓閱讀或使用你程式碼的人知道某個地方都有哪些可能性。

    作為一個常用於給物件“做類別標記”的值,比用數字可讀性好,比用字串效能好,比判斷數字常量約束性強且不需要自己確保數值唯一,enum對反射支援更多,EnumSet可以很高效能地交、並運算。

  • 2 # 程式猿W

    認識列舉

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

    在JDK1.5之後,使用關鍵字enum定義一種新的型別,稱為列舉型別。

    JDK 1.5 中可以在 switch 表示式中使用Enum定義的列舉類的物件作為表示式, case 子句可以直接使用列舉值的名字, 無需新增列舉類作為限定

    列舉的定義

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

    列舉其實是特殊的常量類,且構造方法被預設的強制私有。

    正確的命名方式為:

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

    定義規則如下:

    私有化類的構造器。

    成員變數如果宣告為final。要在構造器中初始化,不允許被修改、

    透過公共方法 呼叫屬性。

    列舉例項必須在前面

    需要在列舉例項後面加上分號,然後再寫建構函式等。

    列舉類預設提供了values()方法,該方法可以很方便得遍歷所有的列舉值

    列舉類物件可以有屬性

    若列舉類顯式的定義了帶引數的構造器, 則在列出列舉值時也必須對應的傳入引數

    Enum類 與 enum關鍵字

    使用enum 關鍵字定義的列舉類,實際上就想當於定義了一個類,此類繼承了Enum類而已。E

    集合對列舉的支援

    集合對列舉的支援,對於Set和Map介面而言又增加了兩個新的子類: EnumSet 、EnumMap兩個類:

    enum 類基本用法

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

    怎麼呼叫呢,Java switch語句引數就支援enum類

    帶構造方法的列舉

    定義規則:

    私有化類的構造器

    列舉例項必須在前面

    需要在列舉例項後面加上分號,然後再寫建構函式等

    讓列舉實現介面

    列舉類可以實現一個或多個介面。與普通類實現介面完全一樣,列舉類實現介面時,需要實現該介面所包含的方法。

    如果需要每個列舉值在呼叫同一個方法時呈現不同的行為,則可以讓每個列舉值在{...}匿名塊中實現自己的業務邏輯

    在列舉中定義抽象方法

    enum類是很特殊的一個類,實際上它是一個抽象類。列舉中可以用抽象方法,但是列舉中的每一個物件都分別實現抽象方法;

    列舉實現單例類

    1、藉助JDK1.5新增的列舉來實現單例模式。不僅能夠避免多執行緒同步問題,而且還能防止反序列化重新建立新的物件.

    2、這種方式是Effective Java 作者 Josh Bloch 提倡的方式

    enum類和常量的區別

    這種方式在使用上跟列舉沒有卻別,但是我們為什麼選擇列舉呢?

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

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

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

    (4) 不容易擴充套件,每一個key對應一個值,

    列舉類與普通類區別

    使用 enum 定義的列舉類預設繼承了 java.lang.Enum 類

    列舉類的構造器只能使用 private 訪問控制符列舉類的所有例項必須在列舉類中顯式列出(, 分隔 ; 結尾). 列出的例項系統會自動新增 public static final 修飾Enum列舉類主要方法

    values()方法:返回列舉型別的物件陣列。該方法可以很方便地遍歷所有的列舉值。

    valueOf(String str):可以把一個字串轉為對應的列舉類物件。要求字串必須是列舉類物件的“名字”。如不是,會有執行時異常。
  • 3 # 神鋒觸怒

    好像在後端開發推薦用列舉 而在安卓開發的時候因為列舉會比正常介面常量大很多位元組 所以谷歌不建議在安卓上使用列舉 用介面常量來替代吧

  • 4 # Java進階架構師

    列舉在日常生活中很常見。例如表示星期的SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,SATURDAY, 就是一個列舉,有且只有這七個常量。

    列舉或者對應的靜態變數方式,最最最常用的地方,就是用於分類的選擇。而使用哪種,取決於是否要將分類對應的值存入資料庫。 比如你的分類1,分類2,分類3對應了1, 2,3,你要隨其他引數儲存進資料庫的,這時候就沒必要用枚舉了,列舉也能做,但多此一舉。 而那些不需要存入資料庫,僅在程式碼邏輯中出現的分類區別的邏輯,就可以大大方方的用列舉。顯得還專業。

    一句話說,列舉是一組常量值。

    那麼我來舉個例子

    如public enum ColorEnum {

    red,

    green,

    yellow,

    blue; }

    這排版太難了,我就這樣吧。

    1、那麼呼叫方法 public void method(ColorEnum enum) { } 時只能傳遞red,green,...四個值中的一個,否則編譯會出錯,這對於使用者程式設計而言是安全的

    2、列舉型別相對與常量型別擁有更好的可讀性,透過字面意思即可知道

    3、列舉型別提供很多方法可以方便的操作,例如迭代查詢等,同時列舉還有較高的執行的效率

    4、在程式寫1,看程式碼的時候,不知道這個1程式碼什麼意思。 一般的靜態變數實際上也是一個值,定義個名稱,能夠從字面上理解程式碼的意思和作用。

  • 5 # 三僡然

    Java中的列舉型別是一種型別,其值由一組固定的常量組成。這聽起來很理論化,所以讓我們嘗試用非正式的方式來描述它們。在Java中,列舉型別是具有預定義例項集的類。這與C#完全不同,其中列舉是一種更簡單的型別。在Java中,列舉可以有建構函式,方法,欄位......它們實際上就像類,只有一些特定的差異:

    列舉是隱式的類的最終子類如果一個列舉是一個類的成員,那就是隱含的 關鍵字不能用於初始化列舉,即使在列舉型別本身內也是如此和方法只是使用列舉常量的文字,而如果需要,可以重寫方法以提供任何內容對於列舉常量,並評估相同的結果,並可以互換使用列舉常量是隱含的 該列舉常數的列表的出現順序被稱為其“ 自然順序 “,並且定義使用的其它專案以及順序:方法,迭代順序中的值,。列舉建構函式應宣告為。編譯器允許非私有建構函式,但這似乎誤導了讀者,因為new永遠不能與列舉型別一起使用。由於這些列舉例項都是有效的單例,因此可以使用identity()比較它們的相等性。你可以在switch語句中使用enum,比如int或char原始資料型別
  • 6 # 小鳥慢慢飛

    說簡單點,列舉就是定義某一類就只有固定的幾個事物,如定義方向只有東、南、西、北、東北、西北、東南、西南這八種,沒有第九種方向。其它的語言也支援列舉型別。

  • 中秋節和大豐收的關聯?
  • 老牌企業轉型,網際網路B2B銷售找客戶有什麼好途徑?