一、int 枚举模式数组
- 在类型安全性和使用方便性没有任何帮助
- apple_ 和orange_ 之间比较,编译器不会有任何警告报出
- 十分脆弱,编译枚举时常量,编译到使用他们的客户端(int关联发生变化须要从新编译)

二、String 枚举模式安全
- int 枚举模式变体
- 常量可打印(int 枚举模式打印出来就是数字),打印出来是字符串
- 会引来性能问题,由于依赖字符串比较
- 会使字符串硬编码到客户端代码中(初级编码会这样,而不是使用适当域(field)名)
- 若是字符串有错误,运行时才会发现,编译时不会有任何警告
三、jdk 1.5之后的新枚举app
- 这种模式本质上是int 值
- 基本思想:经过公有静态 final 类为每一个枚举实例导出常量
- 没有能够访问的构造器,枚举是真正的final 类
- 枚举实例是受控的,客户端不能生成枚举实例,不能扩展,只有声明过的枚举常量

四、枚举提供了编译时的类型安全函数
- 传递错误类型会致使编译时报错
- 试图 == 比较时,各个常量是严格区分的
- 能够增长或者从新编排枚举类型代码,无需修改客户端代码(由于常量值没有被编译到客户端代码中,存在int 模式中)
五、枚举类型容许添加任意方法和域,实现任意接口性能
- 提供了全部Object 方法的高级实现,实现了Comparable 接口和 Serializable 接口
- 并针对枚举类型的可任意改变性,设计了序列化方式
六、方法或域添加到枚举类型中编码
- 将数据和常量关联起来(枚举常量的属性值)
- 可使用适当的方法加强枚举类型(枚举类型先成为一个简单集合,慢慢演变成全功能的抽象)
- 以下,星球枚举类型,传入质量和半径建立常量
- 将数据与枚举常量关联起来,声明实例域,编写带有数据,并将数据保存在域中的构造器
- 枚举天生不可变,全部域都应该是final

七、不一样行为与每一个枚举常量关联起来,可使用以下抽象方法设计



八、枚举类型有一个自动产生的方法3d
- valueOf 方法,将常量的名字转变为常量自己
- 若是在枚举类型中覆盖toString 方法,要考虑编写一个fromString 方法(实现字符串变回相应枚举)

- 枚举构造器不能够访问枚举的静态域,编译时常量除外(枚举不容许在其构造函数中使用静态引用)
- 枚举类型语法要求:仅仅私有构造方法是容许的(以下)

九、枚举常量中共享代码更加困难blog
私有嵌套枚举:策略枚举接口

十、枚举中的switch 语句,适合给外部的枚举类型,增长特定于常量的行为

十一、枚举性能缺陷
- 装载和初始化时会有空间和时间成本
- 枚举优先使用 Comparable 而非 int常量
十二、每当须要固定常量数组的时候,使用枚举
- 与int 相比,枚举易读、安全、功能强大
- 特定于常量的方法,优先启用自有值枚举
- 多个枚举常量共享相同的行为,考虑策略枚举