枚举(理论)

出现的原因:

         为了代替静态常量。

 

常量的弊端

  1. 常量必须定义类型,而如果定义了类型就不明确它定义的意义
  2. 命名非常局限,严格按照java的命名规范的话。需要加前缀或者后缀,如果不加再次看到就很难懂得自己定义的这个变量是干什么的。  (比如提示自己这个常量是什么)

 

出现时在java5以后才出现的,于class、interface关键字是平级的。用来定义枚举类,既然类就可以有成员变量和成员方法,也可以实现接口。一个java文件有且只能有一个public修饰的类名

理解枚举类型

枚举类型是Java 5中新增特性的一部分,它是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性。

枚举实现原理

使用关键字enum创建枚举类型并编译后,编译器会为我们生成一个类,这个类继承了Java API中的java.lang.Enum类,也就是说通过关键字enum创建枚举类型在编译后事实上也是一个类类型而且该类继承自java.lang.Enum类。

枚举的特点:

1:函数一定是私有的,也就是说这个类不能再其他类中创建对象,

2:枚举中必需有常量,否则构造函数不能创建

3:枚举中可以有静态方法

4:枚举中可以有成员变量

  1. 可实现接口。默认的继承java.lang.Enum类而不是继承Object,所有他不能直接的继承其他父类,父类实现了Serializable和comparable接口
  2. 非抽象的枚举类不能派生子类。默认为final修饰。抽象的可以派生子类。(如何为抽象的,类中有未实现的方法就称之为抽象的枚举类)
  3. 枚举类的构造器只能用private修饰。(不能new对象)写于不写都只能是private修饰
  4. 所有的枚举实列必须出现在该类的第一行,否则报错

默认为public static final修饰

 

定义枚举值

所有可能出现的值(星期枚举类,星期一-------星期日都定义),声明是用”,”间隔,声明结束后用”;”结尾

错误的

 

5、  不能重写equals方法和hashCode方法,为final修饰

6、  如果构造器为有参构造,必须给枚举值一个对应类型的默认值。

多个参数是用”,”隔开。调用构造器了

 

主要方法

 

类名.枚举值             获取该枚举值,必须要有变量接受。返回值为该枚举值的类

 

name()                      返回该枚举值所对应的String对象。(toString()相同)

 

ordinal()                      返回该枚举值的索引,索引为定义是的顺序

 

static values()          返回此枚举类中所有的枚举值组成的数组

 

枚举缺点 :

1Enum 需要占用较大的内存,如果对内存敏感,请尽量少使用 Enum,换用做静态常量。

(反正Android官网不建议使用enums)

 

五、总结

不可否认enums会使得代码更易读更安全,但是在编写高效Android代码时避免使用枚举,我们在很多经典的Java书已经看到推荐使用枚举来代替int常量了,但是在Android开发中我不建议使用枚举,特别是大型的App中,能不用则不用。因为它会牺牲执行的速度和并大幅增加文件体积。这也是性能优化中减少OOM的一个方面。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值