Java学习(十三)--枚举&注解

枚举

枚举是一个被命名的整型常数的集合用于声明一组带标识符的常数

  •     例如一个人的性别只能是“男”或者“女”,一周的星期只能是 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 作用范围是和你放置的位置相关;通常我们可以放置具体的语句, 方法, 类.
  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hahaha2221

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值