枚举

本文介绍了枚举的概念,强调了枚举在Java中的特点,包括必须在规定范围内取值,值唯一,以及枚举成员的特性。枚举在开发中常用于定义常量,并在switch语句中有重要作用。此外,还详细讲解了枚举中常用的方法如name()、ordinal()等,并给出了使用枚举描述一周天数的案例,展示了如何通过抽象方法增强程序可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

枚举

枚举的概念:

枚举是在一定范围内取值,并且这个值必须是枚举类型中的任意一个,并且只能有一个。枚举的本质就是一个Java类。

注意事项:

  • 1.必须在规定范围内取值
  • 2.这个值只能取一个
  • 3.这个值可以是规定范围内的任意一个

枚举的引入

public enum Direction {
    //实例列表末尾的分号是可选的
    NORTH, SOUTH, EAST, WEST
}

Direction类型的实例可以按静态变量的方式引用:Direction.NORTH,Direction.EAST

在开发中枚举可以用来定义常量

public enum ServiceCode {
    SYSTEM_NORMAL(200, "系统正常"),
    //异常 返回码范围 400 -419 业务无关异常
    INVALID_PARAM(401,"无效参数"),
    //服务端异常
    SERVICE_ERROR(500, "服务异常");

    private int code;
    private String desc;

    ServiceCode(int code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }
}

枚举的特点
1.枚举中所有的成员,必须出现在枚举对象的下面
2.如果枚举类中有一个成员,那么 枚举对象最后不能省略分号
3.枚举中构造方法必须私有
4.抽象方法有意义,可以用来描述某个枚举成员的信息,提高程序的可读性
5.枚举也是switch语句中的常量形式之一

  • switch语句中可以有哪些?
  • byte short int char String 枚举
public class EnumDemo {
	public static void main(String[] args) {
		Color c = Color.GREEN;
//		c.show();
//		Color.RED.desc();

		switch (c) {
		case RED:
			Color.RED.desc();
			break;
		case GREEN:
			Color.GREEN.desc();
			break;
		case YELLOW:
			Color.YELLOW.desc();
			break;

		default:
			break;
		}
	}
}

enum Color {
	RED {

		@Override
		public void desc() {
			System.out.println("我是红色");
		}

	},
	GREEN {

		@Override
		public void desc() {
			System.out.println("我是绿色");
		}

	},
	YELLOW {
		@Override
		public void desc() {
			System.out.println("我是黄色");
		}
	};
	private Color() {
	}

	private Color(int num) {
		this.num = num;
	}

	public void show() {
		System.out.println("show");
	}

	public abstract void desc();
}

枚举中常用的方法

  • String name()
  • 返回此枚举常量的名称,与其枚举声明中声明的完全相同。
  • int ordinal()
  • 返回此枚举常数的序数(其枚举声明中的位置,其中初始常数的序数为零)。
  • static <T extends Enum>
  • T valueOf(类 enumType, String name)
  • 返回具有指定名称的指定枚举类型的枚举常量。
  • T valueOf(String name)
  • T[] values();
public class EnumDemo {
	public static void main(String[] args) {
//		method01(TrafficLight.GREEN);
//		method02("GREEN");
//		method03(2);
		
		TrafficLight t = TrafficLight.valueOf(TrafficLight.class, "GREEN");
		System.out.println(t);
	}

	/**
	 * 已知枚举的下标,获取枚举的名称,枚举的对象
	 */
	public static void method03(int index) {
		// values方法返回枚举数组
		TrafficLight trafficLight = TrafficLight.values()[index];
		System.out.println(trafficLight);
		String name = trafficLight.name();
		System.out.println(name);
	}

	/**
	 * 已知枚举的名称,获取枚举的下标和枚举对象
	 */
	public static void method02(String name) {
		// T valueOf(String name)
		TrafficLight trafficLight = TrafficLight.valueOf(name);
		int index = trafficLight.ordinal();
		System.out.println(trafficLight + ":" + index);
	}

	/**
	 * 已知枚举对象,获取枚举的下标和名称
	 */
	public static void method01(Enum<TrafficLight> e) {
		System.out.println(e.ordinal() + ":" + e.name());
	}
}

enum TrafficLight{
	RED, GREEN, YELLOW
}

案例:使用枚举来描述一个星期多少天,要求枚举中用抽象方法来描述每一天,并且要使用switch测试。

public class EnumDemo {
	public static void main(String[] args) {
		Weekend day = Weekend.SATURDAY;
		switch (day) {
		case MONDAY:
			Weekend.MONDAY.desc();
			break;
		case TUESDAY:
			Weekend.TUESDAY.desc();
			break;
		case WEDNESDAY:
			Weekend.WEDNESDAY.desc();
			break;
		case THURSDAY:
			Weekend.THURSDAY.desc();
			break;
		case FRIDAY:
			Weekend.FRIDAY.desc();
			break;
		case SATURDAY:
			Weekend.SATURDAY.desc();
			break;
		case SUNDAY:
			Weekend.SUNDAY.desc();
			break;

		default:
			System.out.println("非法星期");
			break;
		}

	}
}
enum Weekend {

	MONDAY {
		@Override
		void desc() {
			System.out.println("星期一");
		}
	},
	TUESDAY {
		@Override
		void desc() {
			System.out.println("星期二");
		}
	},
	WEDNESDAY {
		@Override
		void desc() {
			System.out.println("星期三");
		}
	},
	THURSDAY {
		@Override
		void desc() {
			System.out.println("星期四");
		}
	},
	FRIDAY {
		@Override
		void desc() {
			System.out.println("星期五");
		}
	},
	SATURDAY {
		@Override
		void desc() {
			System.out.println("星期六");
		}
	},
	SUNDAY {
		@Override
		void desc() {
			System.out.println("星期天");
		}
	};
	abstract void desc();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值