【JAVA基础】枚举(enum)用法

我就是我 2022-06-04 02:54 352阅读 0赞

一些程序在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,jdk5以前采用自定义类来解决,jdk5以后可以直接采用枚举来解决

枚举的特性

1、枚举是一种特殊形式的java类
2、枚举类中声明的每一个枚举值代表枚举类的一个实例对象
3、与java中的普通类一样,在声明枚举;类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的
4、枚举类也可以实现接口或继承抽象类
5、jdk5中扩展了switch语句,它除了可以接收int,byte,char,short外,还可以接收一个枚举类型

用法一:常量

在jdk1.5之前,我们定义常量都是:public static final….。jdk1.5出现以后,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

  1. enum Grade{ //Class
  2. A,B,C,D; //Object
  3. }

用法二:switch

jdk1.6之前的switch语句只支持int,byte,char,short,enum类型。

  1. enum Grade{
  2. A,B,C,D;
  3. }
  4. public class Demo{
  5. Grade grade=Grade.A;
  6. public void test(){
  7. switch(grade){
  8. case A:
  9. grade=Grade.A;
  10. break;
  11. case B:
  12. grade=Grade.B;
  13. break;
  14. case C:
  15. grade=Grade.C;
  16. break;
  17. case D:
  18. grade=Grade.D;
  19. break;
  20. }
  21. }
  22. }

用法三:向枚举中添加新方法

如果打算定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且java要求必须先定义enum实例。

  1. enum Grade{
  2. A("100-80"),B("79-70"),C("69-60"),D("59-0");
  3. //成员变量
  4. private String value;//封装每个对象对应的分数
  5. //构造方法
  6. public Grade(String value){
  7. this.value=value;
  8. }
  9. //普通方法
  10. public static String getName(int index){
  11. for(Grade g:Grade.values()){
  12. if(g.getValue()==value){
  13. return g.value;
  14. }
  15. }
  16. return null;
  17. }
  18. //get set方法
  19. public String getValue(){
  20. return this.value;
  21. }
  22. public void setValue(){
  23. this.value=value;
  24. }
  25. }

用法四:覆盖枚举的方法

下面是一个toString()方法覆盖的例子

  1. public class Demo{
  2. enum Grade{
  3. A("100-80"),B("79-70"),C("69-60"),D("59-0");
  4. //成员变量
  5. private String value;
  6. //构造方法
  7. private Grade(String name){
  8. this.value=value;
  9. }
  10. //覆盖方法
  11. @Override
  12. public String toString(){
  13. return this.value;
  14. }
  15. }
  16. public static void main(String[] args){
  17. System.out.println(Grade.A.toString());
  18. }
  19. }

用法五:实现接口

所有的枚举都继承自java.lang.Enum类。由于java不支持多继承,所以枚举对象不能再继承其他类。

  1. public interface Behaviour {
  2. void print();
  3. String getInfo();
  4. }
  5. public enum Grade implements Behaviour {
  6. A("100-80"),B("79-70"),C("69-60"),D("59-0");;
  7. // 成员变量
  8. private String value;
  9. // 构造方法
  10. private Grade(String value) {
  11. this.value= value;
  12. }
  13. // 接口方法
  14. @Override
  15. public String getInfo() {
  16. return this.value;
  17. }
  18. // 接口方法
  19. @Override
  20. public void print() {
  21. System.out.println(this.value);
  22. }
  23. }

用法六:使用接口组织枚举

  1. public interface Food {
  2. enum Coffee implements Food {
  3. BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO
  4. }
  5. enum Dessert implements Food {
  6. FRUIT, CAKE, GELATO
  7. }
  8. }

用法七:

java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的key是enum类型,而value则可以是任意类型,具体可以参考JDK API文档。

枚举和常量定义的区别

1、通常定义常量的方法
通常利用public final static方法定义的代码如下,分别用1表示A,2表示B,3表示C。

  1. public class Grade{
  2. /*A*/
  3. public final static int A = 1;
  4. /*B*/
  5. public final static int B = 2;
  6. /*c*/
  7. public final static int c = 3;
  8. }

2、枚举类型定义常量方法
枚举类型的简单定义方法如下:

  1. enum Grade{
  2. A,B,C;
  3. }

发表评论

表情:
评论列表 (有 0 条评论,352人围观)

还没有评论,来说两句吧...

相关阅读

    相关 enum

    JDK1.5引入了新的类型——枚举。在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便。 大师兄我又加上自己的理解,来帮助各位理解一下。 用法一:常量

    相关 Javaenum

    枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在曰常生活中很常见,例如一个人的性别只能是“男”或者“女”,一周的星期只能是 7 天中的一个等。类似这种当一个