枚举类示例

创建枚举类:MenuConfig4

public enum MenuConfig4 {
	FILE("文件"),EDIT("编辑");
	private String desc;

	public String getDesc() {  //设置相应的get、set方法
		return desc;
	}

	public void setDesc(String desc) {
		this.desc = desc;
	}
	
	private MenuConfig4(String desc)  //创建私有的构造方法
	{
		this.desc = desc;
	}
	
}

枚举测试类:EnumTest2

public class EnumTest2 {

	public static void main(String[] args) {
		testEnum3();

	}
	public static void testEnum()
	{
		String menu = "file";
		//menu如果是String类型,这个特性是JDK1.7之后才引入的
		switch(menu)
		{
		case "file":break;
		case "edit":break;
		}
	}
	public static void testEnum2()
	{
		int menu = MenuConfig2.FILE;
		//0 1 很不直观,我们不知道0 1代表个啥
		//int FILE = 0;
		//int EDIT = 1;
		switch(menu)
		{
		case 0:System.out.println("FILE");break;
		case 1:break;
		}
	}
	public static void testEnum3()
	{
		MenuConfig4 menu = MenuConfig4.FILE;
		//枚举类与switch联合使用,编码上简单清晰
		switch(menu)
		{
		case FILE:System.out.println(menu.getDesc());break;
		case EDIT:break;
		}
	}
	
}

 

 

 

Java 中,枚举类(`enum`)是一种特殊的引用类型,用于定义一组固定的常量。它比使用 `public static final int` 或字符串常量更加类型安全、可读性强,并且可以包含字段、方法、构造函数,甚至实现接口。 下面是一个完整的 Java 枚举类示例,演示了枚举的多种特性: ```java // 定义一个表示星期几的枚举类 public enum DayOfWeek { // 枚举常量(每个常量都可以传参到构造函数) MONDAY("星期一", 1, true), TUESDAY("星期二", 2, true), WEDNESDAY("星期三", 3, true), THURSDAY("星期四", 4, true), FRIDAY("星期五", 5, true), SATURDAY("星期六", 6, false), SUNDAY("星期日", 7, false); // 枚举类的字段 private final String chineseName; private final int dayOrder; private final boolean isWorkday; // 私有构造函数,只能在枚举内部调用 DayOfWeek(String chineseName, int dayOrder, boolean isWorkday) { this.chineseName = chineseName; this.dayOrder = dayOrder; this.isWorkday = isWorkday; } // 普通方法 public String getChineseName() { return chineseName; } public int getDayOrder() { return dayOrder; } public boolean isWorkday() { return isWorkday; } // 静态方法:获取工作日列表 public static List<DayOfWeek> getWorkdays() { return Arrays.stream(values()) .filter(DayOfWeek::isWorkday) .collect(Collectors.toList()); } // 静态方法:根据中文名称查找枚举 public static DayOfWeek fromChineseName(String name) { for (DayOfWeek day : values()) { if (day.chineseName.equals(name)) { return day; } } throw new IllegalArgumentException("无效的中文星期名称: " + name); } // 重写 toString 方法 @Override public String toString() { return name() + " (" + chineseName + "), 第" + dayOrder + "天, 是否工作日: " + isWorkday; } } // 测试类 class EnumTest { public static void main(String[] args) { // 使用枚举常量 DayOfWeek today = DayOfWeek.MONDAY; System.out.println(today); // 调用 toString() // 访问属性 System.out.println("中文名: " + today.getChineseName()); System.out.println("是否工作日: " + today.isWorkday()); // 遍历所有枚举值 System.out.println("\n所有星期:"); for (DayOfWeek day : DayOfWeek.values()) { System.out.println(day); } // 使用静态方法 System.out.println("\n工作日有:"); DayOfWeek.getWorkdays().forEach(System.out::println); // 根据中文名称查找 try { DayOfWeek found = DayOfWeek.fromChineseName("星期六"); System.out.println("\n查找到: " + found); } catch (IllegalArgumentException e) { System.err.println(e.getMessage()); } } } ``` ### 解释: 1. **枚举定义**:使用 `enum` 关键字定义一个类型,其中列出所有可能的常量(如 `MONDAY`, `TUESDAY` 等)。 2. **构造函数**:枚举可以有私有构造函数,在声明常量时传入参数,用于初始化字段。 3. **字段和方法**:枚举可以像普通类一样拥有字段、实例方法、静态方法。 4. **`values()` 方法**:Java 自动生成的静态方法,返回该枚举所有常量的数组。 5. **`toString()` 重写**:提高可读性。 6. **类型安全与语义清晰**:避免魔法值,增强代码可维护性。 7. **不可继承**:枚举类隐式为 `final`,不能被继承。 > 注意:上述代码需要导入: ```java import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值