Java枚举

来源:互联网 发布:java web有什么好书 编辑:程序博客网 时间:2024/06/05 12:10
1- 什么是Java枚举
2- 可以使用==操作符来比较枚举的元素
3- 枚举在Java可以被用来作switch语句的参数
4- 获取枚举的元素
5- 枚举可以有构造函数和方法
6- 覆盖枚举方法
7- 枚举抽象方法

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 == operatorif(obj1 == null)  { }Object obj2 = ....;// Not nullif (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: MONDAYDay: TUESDAYDay: WEDNESDAYDay: THURSDAYDay: FRIDAYDay: SATURDAYDay: 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: FText: FemaleMaleFemaleGender 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 DolaMoney DolaVND DongEURO 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
原创粉丝点击