天天看點

java學習之旅(一)java基礎知識(4)枚舉

  1. 枚舉的用法

    可以把常量放入一個枚舉類之中,而且還可以有一些比常亮更多的其他的方法。

    對于switch可以把枚舉類型放入其中,增加代碼的可讀性。

    在枚舉之中添加新方法

    覆寫枚舉的方法。

    實作接口中的方法。

    使用接口組織枚舉。

    枚舉類型的集合。

  2. 枚舉的實作

    通過enum所定義的枚舉類在編譯期之後生成的是繼承自enum抽象類的類。而enum的構造函數是通過編譯器進行調用的,不可以自己進行調用。

  3. 枚舉與單例

    實作單例的核心在于private私有化類中的構造方法,在enum之中的構造函數就已經被定義成了私有的是以說枚舉天生就是單例模式。

  4. java的枚舉如何進行比較?

    在一些引用類型之中使用equals比較和使用==得出的結果是不相同的,因為 = =比較的是位址,而equals比較的是值,但是在枚舉之中使用equals和= =是相同的,因為通過源碼可以得知在枚舉之中equals就是使用= =進行比較的。

  5. switch對枚舉類型的支援

    在java6之前switch是對枚舉類型是不支援的,隻支援int byte short char在1.7才對枚

    舉類的ordinal方法,即枚舉值的序列值

  6. 枚舉的序列化如何實作

    在序列化的時候Java僅僅是将枚舉對象的name屬性輸出到結果中,反序列化的時候則是通過java.lang.Enum的valueOf方法來根據名字查找枚舉對象。同時,編譯器是不允許任何對這種序列化機制的定制的,是以禁用了writeObject、readObject、readObjectNoData、writeReplace和readResolve等方法。

  7. 枚舉的線程安全性問題

    enum編譯過後生成的類是被final修飾的,是不可繼承的,而且類中的屬性和方法都是靜态的,因為static類型的屬性會在類被加載之後被初始化。當一個Java類第一次被真正使用到的時候靜态資源被初始化、Java類的加載和初始化過程都是線程安全的。是以,建立一個enum類型是線程安全的。