java枚举

Java枚举

1. 简介

JDK1.5引入了新的类型——枚举。

在JDK1.5 之前,我们定义常量都是: public static fianl… 。很难管理。

枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。用于定义有限数量的一组同类常量,例如:

错误级别:
	低、中、高、急
一年的四季:
	春、夏、秋、冬
商品的类型:
	美妆、手机、电脑、男装、女装...

在枚举类型中定义的常量是该枚举类型的实例

2. 定义格式

权限修饰符 enum 枚举名称 {
	实例1,实例2,实例3,...实例n;
}
public enum Level {
	LOW(1), MEDIUM(2), HIGH(3), URGENT(4);
	private int levelValue;
	private Level(int levelValue) {
		this.levelValue = levelValue;
	}
	public int getLevelValue() {
		return levelValue;
	}
}
public enum Level {				//这样的方式更常用,通过字面意思就能理解枚举中常量的含义
	LOW, MEDIUM, HIGH, URGENT;
}

3.枚举类的主要方法

Enum抽象类常见方法

Enum是所有Java语言枚举类型的公共基本类,以下是它的常见方法:

变量和类型方法描述
protected Objectclone()抛出CloneNotSupportedException。
intcompareTo(E o)将此枚举与指定的对象进行比较。
booleanequals(Object other)如果指定的对象等于此枚举常量,则返回true。
Class<?>getDeclaringClass()返回与此枚举常量的枚举类型对应的Class对象。
inthashCode()返回此枚举常量的哈希码。
Stringname()返回此枚举常量的名称,与其枚举声明中声明的完全相同。
intordinal()返回此枚举常量的序数(它在枚举声明中的位置,其中初始常量的序数为零)。
StringtoString()返回声明中包含的此枚举常量的名称。
static<T extends Enum<T>> TvalueOf(Class<T> enumType, String name)返回具有指定名称的指定枚举类型的枚举常量。

以上方法中,只有toString()方法可以被重写

4.实现接口的枚举类

所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。
每个枚举对象,都可以实现自己的抽象方法,例如下面代码

public interface LShow{
	void show();
}
public enum Level implements LShow{
	LOW{
		@Override
		public void show(){
			//...
		}
	},MEDIUM{
		@Override
		public void show(){
			//...
		}
	},HIGH{
		@Override
		public void show(){
			//...
		}
	};
}

5. 注意事项

  • 一旦定义了枚举,最好不要妄图修改里面的值,除非修改是必要的。
  • 枚举类默认继承的是java.lang.Enum类而不是Object类
  • 枚举类不能有子类,因为其枚举类默认被final修饰
  • 只能有private构造方法
  • switch中使用枚举时,直接使用常量名,不用携带类名
  • 不能定义name属性,因为自带name属性
  • 不要为枚举类中的属性提供set方法,不符合枚举最初设计初衷。
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页