一、自定义类实现枚举
- 枚举对象(定义在枚举类中)和属性使用final+static修饰符共同修饰,实现底层优化。
- 枚举对象名通常使用全部大写。
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关键字实现枚举
- 使用enum关键字开发一个枚举类的时候,默认会继承Enum类
- 传统的pubic static final Season2 SPRING=new Season2(“春天”);简化成SPRING(“春天”);这里必须知道,它调用的是哪个构造器。
- 如果使用无参构造器创建枚举对象,实参列表和小括号都可以省略。
- 当有多个枚举对象时,使用逗号间隔,最后分号结尾。
- 枚举对象必须放在行首。
- 枚举类的构造函数是私有的(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实现接口
- 使用enum关键字后,就不能继承其他类了,因为enum会隐式继承Enum,而Java是单继承机制。
- 枚举类和普通类一样,可以实现接口:
enum 类名 implement 接口1 , 接口2{
}