首页 > 其他分享 >枚举

枚举

时间:2023-11-14 09:11:52浏览次数:17  
标签:enum println 枚举 WeekDay 类型 public

一、课程目标

【知识目标】

  1. 理解Java中的枚举类型

  2. 掌握枚举类的使用方法

【能力目标】

  会使用enum关键字定义枚举类型

【素质目标】

  通过上机编程,树立正确的发展观

二、什么是枚举

  在某些场景下,类的对象只有有限个,确定的,我们称此类为枚举类。枚举在曰常生活中很常见,例如星期、性别、季节、支付方式、就职状态等。类似这种当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型。

枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在曰常生活中很常见,例如一个人的性别只能是“男”或者“女”,一周的星期只能是 7 天中的一个等。类似这种当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型。

三、枚举类型的创建方法

  JDK5.0之后枚举类型的声明: 声明枚举时必须使用 enum 关键字,然后定义枚举的名称、可访问性、基础类型和成员等。枚举声明的语法如下:

enum-modifiers enum enumname:enum-base {
    enum-body,
}

    其中,enum-modifiers 表示枚举的修饰符主要包括 public、private 和 internal;enumname 表示声明的枚举名称;enum-base 表示基础类型;enum-body 表示枚举的成员,它是枚举类型的命名常数。

   注意: 如果没有显式地声明基础类型的枚举,那么意味着它所对应的基础类型是int,任意两个枚举成员不能具有相同的名称,且它的常数值必须在该枚举的基础类型的范围之内,多个枚举成员之间使用逗号分隔。

举例:

      下面代码定义了一个表示性别的枚举类型 SexEnum

public enum SexEnum {
    male,female;
}

      下面代码定义了一个表示颜色的枚举类型 Color。 

public enum Color {
    RED,BLUE,GREEN,BLACK;
}

  之后便可以通过枚举类型名直接引用常量,如 SexEnum.male、Color.RED

增强代码可读性

    使用枚举可以增强代码的可读性:例如可以使 switch 语句的可读性更强,例如以下示例代码:

enum Signal {
    // 定义一个枚举类型
    GREEN,YELLOW,RED
}
public class TrafficLight {
    Signal color = Signal.RED;
    public void change() {
        switch(color) {
            case RED:
                color = Signal.GREEN;
                break;
            case YELLOW:
                color = Signal.RED;
                break;
            case GREEN:
                color = Signal.YELLOW;
                break;
        }
    }
}

练习

  创建一个包含一周的每一天的枚举类(WeekDay):星期一(Monday)、星期二(Tuesday)、星期三(Wednesday)、星期四(Thursday)、星期五(Friday)、星期六(Saturday)、星期日(Sunday)

四、枚举类的使用

   Java 中的每一个枚举都继承自 java.lang.Enum 类。当定义一个枚举类型时,每一个枚举类型成员都可以看作是 Enum 类的实例,这些枚举成员默认都被 final、public, static 修饰,当使用枚举类型成员时,直接使用枚举名称调用成员即可。所有枚举实例都可以调用 Enum 类的方法,常用方法如表 1 所示。 

举例

  通过调用枚举类型实例的 values( ) 方法可以将枚举的所有成员以数组形式返回,也可以通过该方法获取枚举类型的成员。 

1、下面的示例创建一个包含 3 个成员的枚举类型 Signal,然后调用 values() 方法输出这些成员。

enum Signal {
    // 定义一个枚举类型
    GREEN,YELLOW,RED;
}
public static void main(String[] args) {
    for(int i = 0;i < Signal.values().length;i++) {
        System.out.println("枚举成员:"+Signal.values()[i]);
    }
} 

练习:将WeekDay类中每一个枚举成员都输出打印出来。

2、创建一个示例,调用valueOf() 方法获取枚举的一个成员,再调用 compareTo() 方法进行比较,并输出结果。具体实现代码如下:

public class TestEnum {
    public enum Sex {
        // 定义一个枚举
        male,female;
    }
    public static void main(String[] args) {
        compare(Sex.valueOf("male"));    // 比较
    }
    public static void compare(Sex s) {
        for(int i = 0;i < Sex.values().length;i++) {
            System.out.println(s + "与" + Sex.values()[i] + "的比较结果是:" + s.compareTo(Sex.values()[i]));
        }
    }
} 

 五、枚举类优化,为枚举添加方法

   Java 为枚举类型提供了一些内置的方法,同时枚举常量也可以有自己的方法。此时要注意必须在枚举实例的最后一个成员后添加分号,而且必须先定义枚举实例。

  例如:创建一个枚举类型 WeekDay,而且在该类型中添加了自定义的方法。

enum WeekDay {
    Mon("Monday"),Tue("Tuesday"),Wed("Wednesday"),Thu("Thursday"),Fri("Friday"),Sat("Saturday"),Sun("Sunday");
    // 以上是枚举的成员,必须先定义,而且使用分号结束
    private final String day;
    private WeekDay(String day) {
        this.day = day;
    }
    public static void printDay(int i) {
        switch(i) {
            case 1:
                System.out.println(WeekDay.Mon);
                break;
            case 2:
                System.out.println(WeekDay.Tue);
                break;
            case 3:
                System.out.println(WeekDay.Wed);
                break;
            case 4:
                System.out.println(WeekDay.Thu);
                break;
            case 5:
                System.out.println(WeekDay.Fri);
                break;
            case 6:
                System.out.println(WeekDay.Sat);
                break;
            case 7:
                System.out.println(WeekDay.Sun);
                break;
            default:
                System.out.println("wrong number!");
        }
    }
    public String getDay() {
        return day;
    }
}

  上面代码创建了 WeekDay 枚举类型,下面遍历该枚举中的所有成员,并调用 printDay() 方法。示例代码如下:

public static void main(String[] args) {
    for(WeekDay day : WeekDay.values()) {
        System.out.println(day+"====>" + day.getDay());
    }
    WeekDay.printDay(5);
}

  Java 中的 enum 还可以跟 Class 类一样覆盖基类的方法。下面示例代码创建的 Color 枚举类型覆盖了 toString() 方法。

public class Test {
    public enum Color {
        RED("红色",1),GREEN("绿色",2),WHITE("白色",3),YELLOW("黄色",4);
        // 成员变量
        private String name;
        private int index;
        // 构造方法
        private Color(String name,int index) {
            this.name = name;
            this.index = index;
        }
        // 覆盖方法
        @Override
        public String toString() {
            return this.index + "-" + this.name;
        }
    }
    public static void main(String[] args) {
        System.out.println(Color.RED.toString());    // 输出:1-红色
    }
}

  这里的 enum 类继承的不是 Object 类,而是 java.lang.Enum 类中的,所以枚举常量类中没有重写 toStirng()方法的前提下,调用的是 java.lang.Enum 类中的 toString()方法,返回的是 枚举常量名。

         

练习:定义一个电脑品牌枚举类,其中只有固定的几个电脑品牌,枚举可以添加属性(name和price)和方法(构造方法和toString方法。),获取所有枚举值。

 

标签:enum,println,枚举,WeekDay,类型,public
From: https://www.cnblogs.com/helloworldcode/p/17830860.html

相关文章

  • java枚举使用
    Java中的枚举类型采用关键字enum来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum类型。要了解枚举类型,建议大家先打开jdk中的Enum类简单读一下,这个类里面定义了很多protected方法,比如构造函数,如果要使用这些方法我们可以把枚举类型定义到当前......
  • 暴力枚举
    1.Coins-AtCoderabc087_b-VirtualJudge(vjudge.net)1#include<bits/stdc++.h>2usingnamespacestd;34longlonga,b,c,x,ans;5intmain()6{78cin>>a>>b>>c>>x;9for(inti=0;i<=a;i++)//枚举......
  • C#枚举转List删除其中一项
    varname_list=Enum.GetNames(typeof(IdentifyTypeEnum)).ToList();name_list.RemoveAt(name_list.IndexOf(IdentifyTypeEnum.ID_TYPE_CORP.ToString()));varvalue_list=Enum.GetValues(typeof(IdentifyTypeEnum)).Cast<int&g......
  • 【基础算法】枚举
    一、枚举思想枚举法,也称穷举法,是指在解决问题的时候穷举每一种可能的情况,最终得到符合要求的答案。枚举法的效率并不高,但适用于一些没有明显规律可循的场景。枚举的算法思想:在解决某些问题时,可能没有办法按一定规律从众多候选答案中找到正确的解。这时,可将所有候选答案逐一列出,......
  • 枚举常量
    #include<stdio.h>//枚举常量:关键字enumenumSex{ //这种枚举类型的变量的未来可能取值 //这三种就是枚举常量 //枚举常量是常量,他的值默认是从0开始的 MALE,//若写成MALE=3,这叫赋初值,会输出3换行4换行5换行 FEMALE, SECRET};intmain(){ enumSexs=MALE;// MALE=3;//erro......
  • C# 枚举高级用法之Description
    在主函数中:publicenumDB{[Description("读")]write=1,[Description("写")]read=2,}privatestaticvoidMain(string[]args){//第一种方法Console.WriteLine(DB.write.ToDescription());Console.WriteLine(DB.read.ToDescrip......
  • JavaSE day02【关键字,代码块,接口,枚举】测评
    选择题题目1(单选):下列关于static关键字描述错误的是()选项:​ A.静态成员被所类的所有对象共享​ B.可以通过对象调用,也可以通过类名调用,建议使用类名​ C.每调用一次都会在内存产生一个新的对象​ D.随着类的加载而加载,优先于对象存在题目2(多选):......
  • JavaSE day02-关键字,接口,代码块,枚举
    JavaSEday02-关键字,接口,代码块,枚举1关键字2代码块3接口4枚举1Java中的关键字1.1static关键字static关键字:静态的意思,可以修饰变量,也可以修饰方法,被static修饰的成员,我们叫做静态成员static特点:静态成员被所类的所有对象共享随着类的......
  • 在C#中如何将int转换为枚举?
    内容来自DOChttps://q.houxu6.top/?s=在C#中如何将int转换为枚举?在C#中如何将一个int类型转换为enum类型?从整数类型:YourEnumfoo=(YourEnum)yourInt;从字符串类型:YourEnumfoo=(YourEnum)Enum.Parse(typeof(YourEnum),yourString);//对于带有[Flags]属性的枚......
  • 巧用枚举解决业务场景的 Switch 语句—Java 实践
    巧用枚举解决业务场景的Switch语句——Java实践Switch语句是一种常见的流程控制语句,用于根据不同的条件执行不同的代码块。然而,当业务场景变得复杂时,使用大量的Switch语句可能导致代码冗长、难以维护和扩展。本文将介绍如何巧妙地使用枚举类型来优化和简化Switch语句的使......