Java枚举

本文深入解析枚举类型在编程中的作用与用法,包括限制取值范围、提高代码可读性和维护性。介绍了枚举的声明、使用方法,如switch语句、抽象方法的定义,以及如何指定枚举值的属性。同时,探讨了枚举实现接口的两种方式。

  枚举的简单介绍:
  枚举的作用就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。 枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段 无法实现这一目标。
  使用枚举可以限制取值范围、提高代码的可读性、便于维护。

  1. 使用enum声明枚举,枚举默认直接继承了java.lang.Enum类,而不是 Object 类;
  2. 因为枚举已经继承了java.lang.Enum类,所以它无法再继承其他类。
  3. 枚举类的对象是固定的,实例个数有限,不可以再new( ),枚举对象后可以跟()。
  4. 枚举元素必须位于枚举类体中的最前面,枚举元素之间使用逗号分隔。
  5. 枚举类的构造方法的访问控制符默认是private,不能使用其他修饰符。
  6. 一旦枚举对象后面加上{},那么该对象实际是枚举匿名内部类对象;
  7. 所有枚举类都提供一个静态的values()方法(返回该枚举类所有对象组成的数组),便于遍历所有枚举对象;
  8. 所有枚举类都提供一个静态的valueOf(String name)方法, 返回枚举类中对象名等于name的对象。

  枚举的声明格式: enum 枚举名称 { 枚举元素1,枚举元素2,…,枚举元素N; }   例如:

enum enumDemo {SPRING, SUMMER, AUTUMN, WINTER;}

  枚举最简单的使用方法,使用switch循环设置每个枚举元素所对应的返回信息。

enum enumDemo {
		SPRING, SUMMER, AUTUMN, WINTER;
		public String toString() {
			String name = null;
			switch (this) {
			case SPRING:
				name = "春季";
				break;
			case SUMMER:
				name = "夏季";
				break;
			case AUTUMN:
				name = "秋季";
				break;
			case WINTER:
				name = "冬季";
				break;
		}
		return name;
	}
}

执行:System.out.println(enumDemo.WINTER.toString());   //打印结果:冬季
  在枚举内定义抽象方法,如果枚举内定义了抽象方法,则需要让这个枚举内的所有枚举元素都实现这个抽象方法,否则编译不通过:

enum enumDemo1 {
	SPRING {
		@Override
		public String show() {
			return "春季";
		}
	},
	SUMMER {
		@Override
		public String show() {
			return "夏季";
		}
	},
	AUTUMN {
		@Override
		public String show() {
			return "秋季";
		}
	},
	WINTER {
		@Override
		public String show() {
			return "冬季";
		}
	};
	public abstract String show();
}

执行:System.out.println(enumDemo1.SUMMER.show());//打印结果:夏季
  如果要为每个枚举值指定属性,则必须声明一个参数个数和类型和枚举值类型对应的构造器,否则编译不通过:

enum enumDemo2 {
	SPRING("春季"), SUMMER("夏季"), AUTUMN("秋季"), WINTER("冬季");
	private String name;
	enumDemo2(String name) {
		this.name = name;
	}
	public String getEnumNmae() {
		return this.name;
	}
}

执行:System.out.println(enumDemo2.AUTUMN.getEnumNmae());//打印结果:秋季
  枚举实现接口有两种写法:一种是直接在枚举内实现,还有一种是把枚举元素变成枚举匿名内部类,然后在这个枚举匿名内部类中实现:

//第一种:直接在枚举内实现
enum enumDemo3 implements A {
	SPRING("春季"), SUMMER("夏季"), AUTUMN("秋季"), WINTER("冬季");
	private String name;
	enumDemo3(String name) {
		this.name = name;
	}
	@Override
	public String getName() {
		return this.name;
	}
}
//第二种:在枚举匿名内部类中实现
enum enumDemo4 implements A {
	SPRING {
		@Override
		public String getName() {
			return "春季";
		}
	},
	SUMMER {
		@Override
		public String getName() {
			return "夏季";
		}
	},
	AUTUMN {
		@Override
		public String getName() {
			return "秋季";
		}
	},
	WINTER {
		@Override
		public String getName() {
			return "冬季";
		}
	};
}

执行:System.out.println(enumDemo3.SPRING.getName());// 打印结果:春季
执行:System.out.println(enumDemo4.SPRING.getName());// 打印结果:春季

  总结:可以将枚举理解为一个普通类,可以在它里面定义构造器,定义变量,定义方法,也可以定义抽象方法,还可以实现一个或多个接口,它和普通类的区别就是普通类可以new,而枚举不可以new,并且枚举中的构造器会被强制私有化。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值