首页 > 其他分享 >枚举Enumeration

枚举Enumeration

时间:2024-04-12 16:01:41浏览次数:17  
标签:name Season Enumeration 枚举 desc public String

枚举

它的对象(具体值)是固定的时(如:性别、季节等)不会更多,普通类不能体现它们是固定的若干个对象。

枚举(enumeration,简写enum)是一组常量的集合;可以理解为特殊的类,里面仅包含一组有限的特定对象。

自定义实现枚举

  1. 构造器私有化,防止直接实例化对象
  2. 去掉set方法,防止属性被修改;保证对象只读
  3. 对枚举对象和属性使用final+static一起修饰,实现底层优化
  4. 枚举对象名通常使用全部大写,常量的命名规范
自定义枚举实现四季
public class Enumeration {
    public static void main(String[] args) {
        System.out.println(Season.SPRING);
        System.out.println(Season.AUTUMN);

    }
}
class Season{
    private String name;
    private String desc;

    public final static Season SPRING =new Season("春天","潮湿");
    public final static Season SUMMER =new Season("夏天","炎热");
    public final static Season AUTUMN =new Season("秋天","凉爽");
    public final static Season WINTER =new Season("冬天","寒冷");
    // 在Season内部直接创建固定对象
    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

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

enum关键字实现枚举

  1. 使用enum关键字替代class
  2. public final static Season SPRING =new Season("春天","潮湿");换成(等价于) SPRING("春天","潮湿")

  3. 如果有多个常量(对象),用","隔开即可
  4. 使用enum实现枚举要把定义常量对象写在最前
  5. 如果使用无参构造器可以省略()。
enum关键字实现枚举
public class Enumeration {
    public static void main(String[] args) {
        System.out.println(Season.SPRING);
        System.out.println(Season.AUTUMN);

    }
}
// enum关键字枚举
enum Season{
    // 定义常量对象
    SPRING("春天","潮湿"),
    SUMMER("夏天","炎热"),
    //    OTHER,// 调用无参构造器
    AUTUMN("秋天","凉爽"),
    WINTER("冬天","寒冷");

    private String name;
    private String desc;

    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

   /* Season() {    // 无参构造器
    }*/

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

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

图 1.编译与反编译

enum常用方法

  1. toString:Enum类已经重写,返回的是当前对象
  2. name:返回的是当前对象名(常量名),子类中不能重写
  3. ordinal:返回当前对象的位置号,
  4. values返回当前枚举类中所有的常量
  5. ValuesOf:把字符串转成枚举对象,要求字符串必须为已有的常量名,否则提示异常
  6. compareTo:比较两个枚举常量(比较编号)。
枚举类的常用方法
 public class EnumMethod {
    public static void main(String[] args) {
        Season autumn=Season.AUTUMN;
        // 输出枚举对象名
        System.out.println(autumn.name());
        // 输出该枚举对象的次序/编号(从0开始)
        System.out.println(autumn.ordinal());
        // values()从反编译可以查看该方法;返回所有定义的枚举对象
       for (Season season:Season.values()){// 增强for循环;遍历取出
           System.out.println(season);
       }
       //valueOf:把字符串转成枚举对象,要求字符串必须为已有的常量名,否则提示异常
        //根据输入的"AUTUMN"参数到Season的枚举对象去查找,找到就返回,没有就报错
        Season autumn1=Season.valueOf("AUTUMN");
        System.out.println("autumn1="+autumn1);
        System.out.println(Season.AUTUMN.compareTo(Season.WINTER));
        System.out.println(autumn1 == autumn);  //判断两个对象是否为同一个
    }
}

enum实现接口

使用enum关键字后就不能继承其他类;因为它有隐式继承了Enum,同时Java是单继承机制。

枚举类和普通类一样可以实现接口。形式:enum 类名 implements 接口1,接口2{}

查看代码
public class EnumMethod {
    public static void main(String[] args) {
        System.out.println("所有星期信息如下");
        for (Week week:Week.values()){
            System.out.println(week.getName());
        }
    }
}

enum Week{      // enum Week extends A{  会提示异常。
    ONE("星期一"),
    TWO("星期二"),
    THREE("星期三"),
    FIRE("星期四"),
    FIVE("星期五"),
    SIX("星期六"),
    SEVEN("星期日");

    private   String name;

    Week(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

 

标签:name,Season,Enumeration,枚举,desc,public,String
From: https://www.cnblogs.com/vayenge/p/18097564

相关文章

  • 泛型类型参数约束2 - 枚举作为约束类型
    先复习下枚举的相关基础知识:枚举类型(EnumType)说明枚举只有一种成员:命名的整型常量的集合枚举是值类型使用枚举有效地防止用户提供无效值,使代码更加清晰定义枚举:注意:​枚举成员不可以使用修饰符​每个枚举成员底层都是一个常量值​默认情况下,枚举成员的类型是int......
  • 数据结构复习-01enum枚举类型
    enum枚举类型语法:enum Nanme{name1=number1,name2=number2,};举例:enumDay{mon=1;tue=2;};enumDayday=mon;printf("dayis%d",day);输出:注意事项:1.若枚举类型中的首个元素未定义则默认为0 2.枚举类型的非首元素的默认值为......
  • 排列型枚举(全排列)
    0.简介在排列型枚举中,我们从给定的元素集合中选择出若干个元素的所有可能排列,这些排列考虑了元素的顺序.1.代码模板#include<bits/stdc++.h>usingnamespacestd;intn;intorder[20];boolchosen[20];//x代表当前选择位voidDFS(intx){ //选满了 if(x==n+1......
  • 【C语言】:枚举和联合体
    这里写自定义目录标题1、枚举1.1枚举类型的声明1.2枚举类型的优点1.3枚举类型的使用2、联合体(共用体)2.1联合体类型的声明2.2联合体的特点2.3联合体大小的计算1、枚举1.1枚举类型的声明枚举顾名思义就是⼀⼀列举,把可能的取值⼀⼀列举。⼀周的星期⼀到星期⽇......
  • 小红不想做莫比乌斯反演杜教筛求因子和的前缀和(枚举)--牛客周赛 Round 39-E
    #include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineendl'\n'#defineinf1e18constintmod=1e9+7;constintN=2e5+5;intn,m,p,x;voidsolve(){ cin>>n>>m>>p>>x; intans=0; for(inti=1;i&......
  • 接口和枚举在方法中的区别
    枚举类型较传统定义常量的方式,除了具有参数类型检测的优势之外,还具有其他方面的优势。用户可以将一个枚举类型看作是一个类,它继承于java.lang.Enum类,当定义一个枚举类型时,每一个枚举类型成员都可以看作是枚举类型的一个实例,这些枚举类型成员都默认被final、public、static......
  • swagger文档枚举类型描述
    背景:问题:使用swagger作为api文档,但文档中的枚举类型仅显示枚举name,对于使用文档的人员来讲不容易理解解决思路:枚举类型加上自定义的描述解决方案maven配置<dependency><groupId>io.swagger.core.v3</groupId><artifactId>swagger-models-j......
  • [蓝桥杯 2022 国 B] 齿轮(优化枚举)
        根据题目描述,如果采用dfs暴力做法枚举所有方案,肯定会超时,因此我们需要优化枚举,我们都知道在同一组共同转动的齿轮中,线速度相等,因此角速度的比值就是半径的反比,因此我们只需要找到对于每个齿轮作为起始齿轮,只需要找到其倍数半径是否存在即可,而倍数上限就是假设存在......
  • [蓝桥杯 2021 省 B] 杨辉三角形(二分查找+枚举)
        我们之前学过有关杨辉三角的一些性质,我们知道杨辉三角某个数等于左上和右上两个数相加,但是如果我们按照这个性质依次枚举每行每列,就会很容易超时,因此我们可以枚举列,再二分查找行来寻找满足要求的答案,我们可以先将列数到30,基本涵盖了所有的答案,通过组合数性质来二......
  • C语言自定义类型变量——枚举(enum)
    一.枚举的定义和声明字面意思,枚举就是一一列举,把可能的取值一一列举,在我们现实生活中有许多可以列举的事物,例如:一周七天,一年四季,性别,月份,三原色等等。当我们需要描述这些数据的时候就可以使用枚举了。其关键字为eunm.类似于结构体,联合体,定义一个枚举类型的基本形式如下:enum......