天天看点

Java学习之路(二十四)| 枚举enum一、自定义类实现枚举二、enum关键字实现枚举三、enum常用方法应用实例enum实现接口

一、自定义类实现枚举

  1. 枚举对象(定义在枚举类中)和属性使用final+static修饰符共同修饰,实现底层优化。
  2. 枚举对象名通常使用全部大写。
package EnumerationLearn;

/**
 * 1、构造器私有化
 * 2、去掉set相关方法,只能读不能修改:防止属性被修改
 * 3、在Season内部创建固定的对象。
 */
public class Season {
    private String seasonName;

    public static final Season SPRING=new Season("春天");
    public static final Season SUMMER=new Season("夏天");
    public static final Season AUTUMN=new Season("秋天");
    public static final Season WINTER=new Season("冬天");


    private Season(String seasonName) {//构造器私有化,外部不能创建对象
        this.seasonName = seasonName;
    }

    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                '}';
    }
}
           
package EnumerationLearn;

public class Enumeration01 {


    public static void main(String[] args) {

        System.out.println(Season.SPRING);
        System.out.println(Season.SUMMER);
        System.out.println(Season.AUTUMN);
        System.out.println(Season.WINTER);

    }
}
           

二、enum关键字实现枚举

  1. 使用enum关键字开发一个枚举类的时候,默认会继承Enum类
  2. 传统的pubic static final Season2 SPRING=new Season2(“春天”);简化成SPRING(“春天”);这里必须知道,它调用的是哪个构造器。
  3. 如果使用无参构造器创建枚举对象,实参列表和小括号都可以省略。
  4. 当有多个枚举对象时,使用逗号间隔,最后分号结尾。
  5. 枚举对象必须放在行首。
  6. 枚举类的构造函数是私有的(priviate)。
package EnumerationLearn;

public class Enumeration02 {
    public static void main(String[] args) {
        System.out.println(Season2.AUTUMN);
    }

}

enum Season2 {

    //格式:常量名(实参列表),常量名(实参列表);    多个常量(对象)之间用逗号间隔,对象的创建必须要在类的开头
    SPRING("春天"), SUMMER("夏天"),AUTUMN("秋天"),WINTER("冬天");


    private String seasonName;
    private Season2(String seasonName) {//构造器私有化
        this.seasonName = seasonName;
    }

    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                '}';
    }
}
           

三、enum常用方法应用实例

方法 说明

toString()

Enum类中有该方法,返回当前对象名,子类可以重写返回属性

name()

返回当前对象名,子类不能重写

ordinal()

返回当前对象的位置号,默认从0开始

values()

返回当前该枚举类型的数组,含有该枚举类中所有的常量

valuesOf(String)

将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常

A.compareTo(B)

比较两个常量,比较的就是位置号!返回两个常量的差值A-B

valueOf的用法

Season2 autumn=Season2.AUTUMN;
        Season2 autumn1= Season2.valueOf("AUTUMN");
        //根据输入的"AUTUMN"回到Season2类中查找,查找到,返回该对象,否则报错。
        System.out.println(autumn==autumn1);//autumn和autumn1是同一个对象;true
           

enum实现接口

  1. 使用enum关键字后,就不能继承其他类了,因为enum会隐式继承Enum,而Java是单继承机制。
  2. 枚举类和普通类一样,可以实现接口:
enum 类名 implement 接口1 , 接口2{
}