强哥说Java--枚举类(一)

简介: 强哥说Java--枚举类(一)

1. 什么是枚举类



在数学和计算机科学中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的技术。


枚举是一个被命名的整型常数的集合。枚举在生活中非常常见,列举如下:


表示星期几:SUNDAY、MONDAY、TUESTDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举;


性别:MALE(男)、FEMALE(女)也是一个枚举;


订单的状态:PAIDED(已付款)、UNPAIDED(未付款)、FINISHED(已完成),CANCELED(已取消)。


简单来说,枚举类就是一个可以表示枚举的类,当一个类的对象只有有限个、确定个的时候,我们就可以定义一个枚举类来存放这些对象。


2. 为什么需要枚举类



如果不使用枚举类,我们想在一个类中定义星期一到星期天,就可能需要在类中使用常量来表示,实例如下:


public class Weekday {
    public static final int MONDAY = 1;
    public static final int TUESDAY = 2;
    public static final int WEDNESDAY = 3;
    public static final int THURSDAY = 4;
    public static final int FRIDAY = 5;
    public static final int SATURDAY = 6;
    public static final int SUNDAY = 7;
}


使用一组常量表示一个枚举的集合,存在一个问题,编译器无法检测每个值的范围是否合法,例如:


int day = 0; // 假设 day 的值为 0
if (day == Weekday.MON) {
    System.out.println("今天星期一");
}


显然,0 不在这些常量值所表示的范围(1~7)内,但编译器不会给出提示,这样的编码是非常不推荐的。


当我们在开发中需要定义一组常量的时候,建议使用枚举类。接下来我们就来看如何定义枚举类。


3. 如何自定义枚举类



在 Java 5.0 后,可以使用eunm关键字来定义一个枚举类


通常需要以下几个步骤:


使用enum关键字定义枚举类,这个类隐式继承自java.lang.Enum类;


在枚举类内部,提供当前枚举类的多个对象,多个对象之间使用逗号分割,最后一个对象使用分号结尾;


声明枚举类的属性和构造方法,在构造方法中为属性赋值;


提供 getter 方法,由于Enum类重写了 toString()方法,因此一般不需要我们自己来重写。


toString () 方法用于返回以一个字符串表示的 Number 对象值。


具体实例如下:


package com.caq.exception;
import java.awt.*;
public class Test2 {
    public static void main(String[] args) {
        Test test1 = Test.man;
        System.out.println(test1);
        System.out.println(test1.getSexName());
        System.out.println(Test.woman.getSexName());
        System.out.println(Test.unknow.getSexName());
    }
    enum Test{
        //使用enum关键字生成枚举类
        //1.枚举类内部提供多个对象,这些对象用逗号分隔开来
        //2.声明枚举类的属型
        //3.编写构造方法,为属型赋值
        //3.提供获得属型的Getter方法(封装里的知识)
        //1.
        man("男"),
        woman("女"),
        unknow("未知");
        //2.
        private final String sexName;
        //3.
        Test(String sexName){
            this.sexName=sexName;
        }
        public String getSexName() {
            return sexName;
        }
    }
}


运行结果:


man
未知


相关文章
|
5天前
|
Java 开发者
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
10 0
|
5天前
|
安全 Java 开发者
Java面试题:什么是Java 15中的密封类以及其限制?还有哪些其他特性用于限制类继承的机制吗?
Java面试题:什么是Java 15中的密封类以及其限制?还有哪些其他特性用于限制类继承的机制吗?
12 1
|
5天前
|
设计模式 存储 安全
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
14 1
|
6天前
|
Java 调度
Calendar类在Java中的应用
Calendar类在Java中的应用
|
10天前
|
开发框架 Java Android开发
Java中的类反射与动态代理详解
Java中的类反射与动态代理详解
|
12天前
|
Java 数据安全/隐私保护
|
12天前
|
Java 数据安全/隐私保护
Java中的类继承与多态详解
Java中的类继承与多态详解
|
12天前
|
设计模式 Java
Java中的动态加载与卸载类
Java中的动态加载与卸载类
|
5天前
|
存储 运维 前端开发
Java面试题:什么是Java的异常处理机制?列举常见的异常类,并说明使用场景
Java面试题:什么是Java的异常处理机制?列举常见的异常类,并说明使用场景
15 0
|
5天前
|
安全 Java 数据处理
Java面试题:什么是Java中的Optional类及其使用场景?
Java面试题:什么是Java中的Optional类及其使用场景?
8 0