Java枚举

1- Java枚举(Enum)是什么?

枚举(enum)是Java的一个关键字,它用于表示在Java中公知的值的固定个数的特征,例如一周的天数,太阳系中的行星数量等。枚举(枚举)是在Java JDK 1.5中引入的,它的自动装箱和拆箱,泛型,可变参数和静态导入的J2SE 5最喜欢的功能之一。
 
现在我们看来在枚举存在之前,Java在特定的情况下所做的:
  • WeekDayConstants.java
package yiibai.tutorial.beforej5;

// This class defines the constants are the days of the week.
public class WeekDayConstants {

  public static final int MONDAY = 2;
  public static final int TUESDAY = 3;
  public static final int WEDNESDAY = 4;
  public static final int THURSDAY = 5;

  public static final int FRIDAY = 6;
  public static final int SATURDAY = 7;
  public static final int SUNDAY = 1;
}
用类的方法返回在一周中每一天具体要做的作业。 (时间表的那种)。
  • Timetable.java
package com.yiibai.tutorial.beforej5;

public class Timetable {

   // Returns name of Job will do
   public static String getJob(int dayInWeek) {
       if (dayInWeek == WeekDayConstants.SATURDAY
               || dayInWeek == WeekDayConstants.SUNDAY) {
           return "Nothing";
       }
       return "Coding";
   }
} 
  1. 没有类型安全:首先,它不是类型安全的;您可以指定任何有效的int值到dayInWeek
  2. 任何有意义的打印:任何这些常数的值被打印,而不是打印一个有意义的名称,其数值就是当您打印MONDAY会打印出“2”,而不是“MONDAY”
见Java 5中代码:
  • WeekDay.java
package com.yiibai.tutorial.javaenum;

public enum WeekDay {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
  • Timetable.java
package com.yiibai.tutorial.javaenum;

public class Timetable {

   public static String getJob(WeekDay weekDay) {
       if (weekDay == WeekDay.SATURDAY || weekDay == WeekDay.SUNDAY) {
           return "Nothing";
       }
       return "Coding";
   }

}

2- 可以使用==操作符来比较枚举元素

枚举就像类,接口的参考对象,但它也可以使用==操作
让我们看看参考对象是如何比较的。
// To compare the reference object, generally used method equals (..)
Object obj1 = .... ;

// Comparing object with null, can use the == operator
if(obj1 == null)  {
 
}

Object obj2 = ....;
// Not null
if (obj1 != null)   {
   // Comparing two objects.
   if(obj1.equals(obj2))   {
       
   }
}
使用枚举,你可以使用==操作符来比较。
  • CompareEnumDemo.java
package com.yiibai.tutorial.javaenum;

public class CompareEnumDemo {

   public static void main(String[] args) {

       WeekDay today = WeekDay.SUNDAY;

       // Use the == operator to compare two elements of Enum
       if (today == WeekDay.SUNDAY) {
           System.out.println("Today is Sunday");
       }
   }
}

3- 枚举在Java中可以用来作为switch语句的参数

就像基本数据类型 (int, float, ..) 枚举可以用作在switch语句的参数。
让我们来看一个例子:
  • SwitchDemo.java
package com.yiibai.tutorial.javaenum;

public class SwitchDemo {

    public static void main(String[] args) {
        WeekDay day = WeekDay.THURSDAY;

        switch (day) {
        case MONDAY:
            System.out.println("Working day");
            break;
        case SATURDAY:
        case SUNDAY:
            System.out.println("Holiday");
            break;
        default:
            System.out.println(day);
        }
    }
}

4- 获取枚举的元素

我们可以提取枚举的所有元素,使用values ()方法。参见下面的例子:
  • ValuesDemo.java
package com.yiibai.tutorial.javaenum;

public class ValuesDemo {

    public static void main(String[] args) {

 
        // Get all the elements of the Enum.
        WeekDay[] allDays = WeekDay.values();

        for (WeekDay day : allDays) {
            System.out.println("Day: " + day);
        }
    }
}
 
运行示例的结果:
Day: MONDAY
Day: TUESDAY
Day: WEDNESDAY
Day: THURSDAY
Day: FRIDAY
Day: SATURDAY
Day: SUNDAY

5- 枚举可以有构造函数和方法

枚举可以有构造函数和方法。仅构造初始化枚举内的对象,外部不能调用。我们看到一个例证:
  • Gender.java
package com.yiibai.tutorial.javaenum;

public enum Gender {

 
    // Initialize the elements from Constructor.
    // The element is always final, static
    MALE("M", "Male"), FEMALE("F", "Female");

    private String code;
    private String text;
 
    // Constructor of Enum internal use only
    // Modifier of constructor is private
    // If you do not declare private, java alway understand is private.    
    private Gender(String code, String text) {
        this.code = code;
        this.text = text;
    }

 
    // Static method return Gender by code.
    public static Gender getGenderByCode(String code) {
        for (Gender gender : Gender.values()) {
            if (gender.code.equals(code)) {
                return gender;
            }
        }
        return null;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
}
  • GenderDemo.java
package com.yiibai.tutorial.javaenum;

public class GenderDemo {

   public static void main(String[] args) {

       Gender marryGender = Gender.FEMALE;

       System.out.println("Code: " + marryGender.getCode());
       System.out.println("Text: " + marryGender.getText());

       // Gender[].
       for (Gender gender : Gender.values()) {
           System.out.println(gender.getText());
       }
       
       
       String code ="M";
       Gender gender= Gender.getGenderByCode(code);
       
       System.out.println("Gender by code: "+ gender);
   }
}
运行示例的结果:
Code: F
Text: Female
Male
Female
Gender by code: MALE

6- 覆盖枚举方法

可以重写继承自Object类的 toString() 方法。
  • Currency.java
package com.yiibai.tutorial.javaenum;

public enum Currency {

   VND, USD, EURO ;

   @Override
   public String toString() {
       if (this == VND) {
           return "Dong";
       } else if (this == USD) {
           return "Dola";
       }
       return super.toString();
   }

   public static void main(String[] args) {
       Currency money = Currency.USD;

       System.out.println("Money " + money);
       System.out.println("Money " + money.toString());
       System.out.println("VND " + Currency.VND);
       System.out.println("EURO " + Currency.EURO);
   }
}
运行示例的结果:
Money Dola
Money Dola
VND Dong
EURO EURO

7- 在枚举抽象方法

  • Color.java
package com.yiibai.tutorial.javaenum;

public enum Color {

   RED("red") {
       @Override
       public String getHexCode() {
           return "#ff0000";
       }
   },
   GREEN("green") {
       @Override
       public String getHexCode() {
           return "#00ff00";
       }
   },
   BLUE("blue") {
       @Override
       public String getHexCode() {
           return "#0000ff";
       }
   };

   private String name;

   Color(String name) {
       this.name = name;
   }

   public String getName() {
       return name;
   }

 
   public abstract String getHexCode();

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值