Java枚举类

你之因此能优于别人,正是由于你坚持了别人所不能坚持的。
本文相关代码在个人Github,欢迎Star~
https://github.com/zhangzhibo1014/DaBoJava

枚举类

枚举(enum)类型是 Java 5 新增的特性,它是一种新的类型,容许用常量来表示特定的数据片段,并且所有都以类型安全的形式来表示。java

枚举类定义

  • enumclassinterface 具备相同地位
  • 默认继承 java.lang.Enum 类,因此不能继承其余类,其中 java.lang.Enum 类实现了 java.lang.Serializablejava.lang.Comparable 接口
  • 使用 enum 定义,默认使用 final 修饰,所以不能派生子类
  • 构造器默认使用 private 修饰,且只能使用 private 修饰
  • 枚举类的全部实例必须在枚举类的第一行显式列出,不然这个枚举类永远不能产生实例
  • 列出这些实例时,会自动添加 public static final 修饰,无需显式添加

无构造函数的枚举类

/**
 * 枚举类
 */
public class Demo {
    public static void main(String[] args) {
        //声明一个枚举类实例,并赋值
        Season season = Season.SPRING;
        switch(season) {
            case SPRING:
                System.out.println("Spring");
                break;
            case SUMMER:
                System.out.println("Summer");
                break;
            case FALL:
                System.out.println("Fall");
                break;
            case WINTER:
                System.out.println("Winter");
                break;
            default:
                break;
        }
    }
}

/**
 * 定义一个枚举类
 */
enum Season{
    SPRING, SUMMER, FALL, WINTER
}

有构造函数的枚举类

public enum Health{

    GOOD(0, "良好"),
    SICK(1, "生病"),
    FINE(2, "健康");

    private int code;
    private String name;

    private Health(int code, String name) {
        this.code = code;
        this.name = name;
    }

    public int getCode() {
        return code;
    }

    public String getName() {
        return name;
    }
}

枚举的方法

int compareTo(Enum e):用于比较两个枚举类型的顺序,若是该枚举类型位于枚举类型e以后,则返回正数,反之返回负数,相同返回零
values():返回一个枚举类型的数组,能够用来遍历枚举类
String name():返回枚举实例的枚举值。
int ordinal():返回枚举实例的声明顺序,从0开始
T valueOf(Class<T> enumType, String name):返回带指定名称的指定枚举类型的枚举常量。
boolean equals():用来比较两个枚举对象的枚举值。相同返回true,反之返回false
                  也可使用 == 来比较
                  
public class Demo2 {
    public static void main(String[] args) {
        Health health = Health.GOOD;
        Health health1 = Health.FINE;
        Health health2 = Health.SICK;
        Health health3 = Health.GOOD;

        //compareTo()
        System.out.println(health.compareTo(health1));
        System.out.println(health1.compareTo(health2));
        //values()
        Health[] healths = Health.values();
        for(Health h : healths) {
            System.out.print(h + " ");
        }
        System.out.println();
        //name()
        System.out.println(health.name());
        //ordinal()
        System.out.println(health2.ordinal());
        //valueOf()
        Health health4 = Health.valueOf(Health.class, health2.name());
        System.out.println(health4);
        //equals()
        System.out.println(health.equals(health3));
        System.out.println(health == health3);
    }
}
/**
 * 枚举类
 */
enum Health{
    GOOD(0, "良好"),
    SICK(1, "生病"),
    FINE(2, "健康");

    private int code;
    private String name;

    private Health(int code, String name) {
        this.code = code;
        this.name = name;
    }

    public int getCode() {
        return code;
    }

    public String getName() {
        return name;
    }
}

枚举实现原理

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

总结

枚举类能够代替常量来使用,好比:状态码,星期等,结合实际场景使用。github

相关代码记录于GitHub中,欢迎各位伙伴 Star数组

有任何疑问 微信搜一搜 [程序猿大博] 与我联系~安全

若是以为对您有所帮助,请 点赞收藏 ,若有不足,请评论或私信指正!谢谢~微信

相关文章
相关标签/搜索