邯郸网站建设公司企业品牌推广
枚举
对应英文(enumeration, 简写enum)
枚举是一组常量的集合,属于一种特殊的类,里面只包含一组有限的特定的对象。
自定义类实现枚举
1.不需要提供setXxx方法,因为枚举对象值通常为只读.
2.对枚举对象/属性使用 final + static共同修饰,实现底层优化.(final 和 static 搭配使用可以不导致类加载,效率更高)
3.枚举对象名通常使用全部大写,常量的命名规范.
4.枚举对象根据需要,也可以有多个属性
public class Enumeration02 {public static void main(String[] args) {System.out.println(Season.AUTUMN);System.out.println(Season.SPRING);}
}//演示字定义枚举实现
class Season {//类private String name;private String desc;//描述//定义了四个对象, 固定.public static final Season SPRING = new Season("春天", "温暖");public static final Season WINTER = new Season("冬天", "寒冷");public static final Season AUTUMN = new Season("秋天", "凉爽");public static final Season SUMMER = new Season("夏天", "炎热");//1. 将构造器私有化,目的防止 直接 new//2. 去掉setXxx方法, 防止属性被修改//3. 在Season 内部,直接创建固定的对象//4. 优化,可以加入 final 修饰符(static会导致类加载,防止这种情况, final 和 static 搭配使用可以不导致类加载,效率更高)private Season(String name, String desc) {this.name = name;this.desc = desc;}public String getName() {return name;}public String getDesc() {return desc;}
}
- 构造器私有化
- 本类内部创建一组对象
- 对外暴露对象(通过为对象添加
public final static
修饰符) - 可以提供
get
方法,但是不要提供set
enum 关键字实现枚举
public class Enumeration03 {public static void main(String[] args) {System.out.println(Season2.AUTUMN);System.out.println(Season2.SUMMER);}
}
//演示使用enum关键字来实现枚举类
enum Season2 {//类//定义了四个对象, 固定.
// public static final Season SPRING = new Season("春天", "温暖");
// public static final Season WINTER = new Season("冬天", "寒冷");
// public static final Season AUTUMN = new Season("秋天", "凉爽");
// public static final Season SUMMER = new Season("夏天", "炎热");//如果使用了enum 来实现枚举类//1. 使用关键字 enum 替代 class//2. public static final Season SPRING = new Season("春天", "温暖") 直接使用// SPRING("春天", "温暖") 解读 常量名(实参列表)//3. 如果有多个常量(对象), 使用 ,号间隔即可//4. 如果使用enum 来实现枚举,要求将定义常量对象,写在前面//5. 如果我们使用的是无参构造器,创建常量对象,则可以省略 ()SPRING("春天", "温暖"), WINTER("冬天", "寒冷"), AUTUMN("秋天", "凉爽"),SUMMER("夏天", "炎热"), What();private String name;private String desc;//描述private Season2() {//无参构造器}private Season2(String name, String desc) {this.name = name;this.desc = desc;}public String getName() {return name;}public String getDesc() {return desc;}
}
注意事项
-
如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略。
-
当有多个枚举对象时,使用,间隔,最后有一个分号结尾。
-
枚举对象必须放在枚举类的行首。
enum 方法
使用关键字enum
时,会隐式继承Enum
类, 这样我们就可以使用Enum
类相关的方法。
toString
:Enum
类已经重写过了,返回的是当前对象名,子类可以重写该方法,用于返回对象的属性信息。name
:返回当前对象名(常量名),子类中不能重写。ordinal
:返回当前对象的位置号,默认从0
开始。values
:返回当前枚举类中所有的常量。valueOf
:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常compareTo
:比较两个枚举常量,比较的就是编号(前减后编号)
enum 实现接口
使用enum
关键字后,就不能再继承其它类了,因为enum
会隐式继承Enum
,而 Java
是单继承机制。
枚举类和普通类一样,可以实现接口