枚举
枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数
- 例如一个人的性别只能是“男”或者“女”,一周的星期只能是 7 天中的一个等
- 类似这种当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型
- 只读、无需修改;
枚举属于一种特殊的类,里面只包含一组有限的特定的对象。
在 JDK 1.5 之前没有枚举类型,那时候一般用接口常量来替代;使用 Java 枚举类型 enum 可以更贴近地表示这种常量;
实现方式
//自定义枚举类
测试类;
@Test
public void test01(){
System.out.println(Season.getAUTUMN());
System.out.println(Season.getSPRING());
System.out.println(Season.getSUMMER());
System.out.println(Season.getWINTER());
}
public class Season {
//1.声明Season对象的属性:private final修饰
private final String seasonName;
private final String seasonDesc;
//2.私化类的构造器,并给对象属性赋值
private Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//3.提供当前枚举类的多个对象:public static final的
private static final Season SPRING = new Season("春天", "温暖");
private static final Season SUMMER = new Season("夏天", "炎热");
private static final Season AUTUMN = new Season("秋天", "干燥");
private static final Season WINTER = new Season("冬天", "寒冷");
//4.其他诉求1:获取枚举类对象的属性
public static Season getSPRING() {
return SPRING;
}
public static Season getSUMMER() {
return SUMMER;
}
public static Season getAUTUMN() {
return AUTUMN;
}
public static Season getWINTER() {
return WINTER;
}
//4.其他诉求1:提供toString()
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
//enum关键字
测试类:
@Test
public void test02(){
System.out.println(Season01.AUTUMN);
System.out.println(Season01.SPRING);
System.out.println(Season01.SUMMER);
System.out.println(Season01.WINTER);
}
enum Season01 {
//1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束
SPRING("春天", "春暖花开"),
SUMMER("夏天", "夏日炎炎"),
AUTUMN("秋天", "秋高气爽"),
WINTER("冬天", "冰天雪地");
//2.声明Season对象的属性:private final修饰
private final String seasonName;
private final String seasonDesc;
//3.私化类的构造器,并给对象属性赋值
private Season01(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//4.其他诉求1:获取枚举类对象的属性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
@Override
public String toString() {
return "Season01{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
//定义了一个表示性别的枚举类型 SexEnum
public enum SexEnum {
male,female;
//这里是调用SexEnum的无参构造器
}
说明:
SexEnum类没有属性;
有两个枚举对象,由无参构造器生成;
//定义一个表示颜色的枚举类型 Color
public enum Color {
RED,BLUE,GREEN,BLACK;
}
然后可以通过枚举类型名直接引用常量;
如 SexEnum.male、Color.RED。
//枚举类接口
public class EnumDetail {
public static void main(String[] args) {
Music.CLASSICMUSIC.playing();
}
}
class A {
}
//1.使用enum关键字后,就不能再继承其它类,因为enum会隐式继承Enum,而Java是单继承机制
//2.enum实现的枚举类,仍然是一个类,所以还是可以实现接口的.
interface IPlaying {
public void playing();
}
enum Music implements IPlaying {
CLASSICMUSIC;
@Override
public void playing() {
System.out.println("播放好听的音乐...");
}
}
interface Info{
void show();
}
//使用enum关键字枚举类
enum Season1 implements Info{
//1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束
SPRING("春天","春暖花开"){
@Override
public void show() {
System.out.println("春天在哪里?");
}
},
SUMMER("夏天","夏日炎炎"){
@Override
public void show() {
System.out.println("宁夏");
}
},
AUTUMN("秋天","秋高气爽"){
@Override
public void show() {
System.out.println("秋天不回来");
}
},
WINTER("冬天","冰天雪地"){
@Override
public void show() {
System.out.println("大约在冬季");
}
};
}
Enum 类的方法
注解
说明:
@Override
- 表示指定重写父类的某个方法(编译层面验证),若父类没有某方法,则会报错;
- 若没写@Override注解,而父类具有某个方法(编译层面验证),仍然构成重写;
@SuppressWarnings
- 可以指定的警告类型:all,抑制所有警告;boxing,抑制与封装/拆装作业相关的警告;;cast,抑制与强制转型作业相关的警告;null,抑制与空值分析相关的警告;。。。
- SuppressWarnings 作用范围是和你放置的位置相关;通常我们可以放置具体的语句, 方法, 类.