美文网首页
关于枚举 (Enum )

关于枚举 (Enum )

作者: hunter886 | 来源:发表于2018-04-09 20:52 被阅读19次
  • Final 类型的类

枚举类经过编译器编译之后会被添加 Final 修饰,并且继承自 Enum 类 。所以使用 enum 声明的类不能继承别的类也不能被别的类继承,但是可以实现接口

  • 枚举常量

所有成员变量都会被使用 static final 修饰

  • 构造方法

默认的构造方法为 private 修饰的。如果添加构造方法同样必须使用 private 来修饰。并且在 Jvm 层面保证了 构造方法不能被反射取到或者使用。在编译阶段,编译器会为我们自己定义的构造方法添加 name 和 ordinal 两个参数

  • 线程安全

枚举常量都是 static 类型的,在枚举类加载完成后,会进行枚举常量的初始化,之后枚举类无法再实例化和修改。java 的类加载、初始化过程是线程安全的,因此创建一个 enum 是线程安全的。

  • 自有序列化

在序列化的时候 Java 仅仅是将枚举对象的 name 属性输出到结果中,反序列化的时候则是通过 java.lang.Enum 的 valueOf 方法来根据名字查找枚举对象。同时,编译器是不允许任何对这种序列化机制的定制的,因此禁用了writeObject、readObject、readObjectNoData、writeReplace和readResolve 等方法;

  • 保证单例

    • 枚举常量为 static 修饰的,并且因为类加载是线程安全的,所以不会被重复创建;
    • 枚举类内部重写了 clone() 方法,保证里不能被使用 clone 来创建对象
    • Jvm 限制了使用反射获取构造方法
    • 重写 readObject() 方法 , 保证不能被反序列生成对象

附一个单例的写法:

public classResource{ }

public enum SomeThing { 

  INSTANCE;
  private Resource instance; 

  private SomeThing() { 
    instance = newResource();
   } 

  public Resource getInstance() {
   return instance; 
  } 
}


相关文章

  • swift3语法(八)

    枚举/结构体 枚举 定义形式enum 枚举名 { 枚举值} // 例如enum CompassPoint {...

  • 关于枚举 (Enum )

    Final 类型的类 枚举类经过编译器编译之后会被添加 Final 修饰,并且继承自 Enum 类 。所以使用 e...

  • Rust 编程语言-6-枚举和模式匹配

    6. Enum和Pattern matching 6.1 Enum枚举 IP地址枚举 消息类型枚举:可以看到枚举中...

  • 菜鸡学Swift3.0 12.枚举

    1. 枚举定义 enum 定义枚举类型 { case 枚举项 ... } 2.原始值 rawValue enum...

  • Swift Day03 枚举 可选项

    一、枚举 1. 枚举(enum)的基本写法? 2. 枚举(enum)的关联值(Associated Value)?...

  • Python_枚举

    一、枚举 Enum类 Python中所有枚举类型都是enum模块下的Enum类的子类。 枚举中的标识最好全部使用大...

  • 枚举学习

    java enum枚举类 enum(枚举)类介绍 **java枚举类是一组预定义常量的集合,使用enum关键字声明...

  • OC中枚举写法 以及 字符串类型枚举实现探索

    常见枚举写法 C语言模式的枚举写法:enum 普通【整型】枚举写法 :NS_ENUM 位移枚举 :NS_OPTIO...

  • 枚举: 使用小汇总

    枚举enum是同class,interface同一级别的特性。 枚举enum不能被继承。 枚举示例: 有人说枚举就...

  • Swift枚举高级用法(Enum)

    关于swift的枚举 一 swift对于枚举的扩展性(Enum) 枚举的继承(继承任何类和协议,目前除了swift...

网友评论

      本文标题:关于枚举 (Enum )

      本文链接:https://www.haomeiwen.com/subject/gllwhftx.html