1,枚舉
public enum Color { blue, red, yellow }
枚舉是會被另外處理的。
- 枚舉只能擁有私有的構造器 枚舉類實際上是一個繼承Enum的一個final類
- 枚舉類不允許被反序列化,Enum重寫了方法
- 靜態代碼塊中對final變量的值進行初始化
- enum類最終是一個final class
public final class voctrals.study.whatisspring.test.Color extends java.lang.Enum<voctrals.study.whatisspring.test.Color> { public static final voctrals.study.whatisspring.test.Color blue; public static final voctrals.study.whatisspring.test.Color red; public static final voctrals.study.whatisspring.test.Color yellow; public static voctrals.study.whatisspring.test.Color[] values(); // jdk給加上的 public static voctrals.study.whatisspring.test.Color valueOf(java.lang.String); // jdk給加上的 public int getValue(); static {}; }
Enum中的方法
/** * prevent default deserialization */ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { throw new InvalidObjectException("can't deserialize enum"); } private void readObjectNoData() throws ObjectStreamException { throw new InvalidObjectException("can't deserialize enum"); }
2,單例模式
單例模式就是保證整個jvm中只存在唯一的一個實例。
餓漢式,在被jvm加載的過程中就已經被初始化了。靜態代碼塊的原因。
public class BeanContainer { public static BeanContainer getInstance() { return ContainerHolder.HOLDER.instance; } private enum ContainerHolder { HOLDER; private BeanContainer instance; ContainerHolder() { instance = new BeanContainer(); } } }