枚举
格式
//权限修饰符 enum 枚举名称 { 实例1,实例2,实例3,实例4; }
public enum Level {
LOW(30), MEDIUM(15), HIGH(7), URGENT(1);
private int levelValue;
private Level(int levelValue) {
this.levelValue = levelValue;
}
public int getLevelValue() {
return levelValue;
}
}
再有
public enum Level {
LOW,MEDIUM,HIGH;
}
枚举类的主要方法
Enum抽象类的常见方法
返回类型 | 方法名称 | 方法说明 |
---|---|---|
int | compareTo(E o) | 比较此枚举与指定的对象的顺序 |
boolean | equals(Object other) | 当指定对象等于此枚举常量时,返回true |
class<?> | getDeclaringClass() | |
String | name() | |
int | ordinal() | 返回枚举常量的序数 |
String | toString() | |
static<T extends Enum> | static valueOf(Class enumType,String) | 返回带指定名称的指定枚举类型的枚举常量 |
public class Demo {
public static void main(String[] args) {
//枚举级别,直接点调用
//比较compareTo,顺序在后为-在前为+
System.out.println(Level.LOW.compareTo(Level.HIGH));
System.out.println(Level.HIGH.compareTo(Level.LOW));
//
System.out.println(Level2.LOW.name());
System.out.println(Level2.LOW.toString());
System.out.println(Level2.LOW.ordinal());
Level2 x = Enum.valueOf(Level2.class,"HIGH");
System.out.println(x.name());
}
}
枚举接口
因为Enum是抽象类,所以找其父类就需要接口
所有的枚举都继承自java.lang.Enum类。
由于Java 不支持多继承,所以枚举对象不能再继承其他类。 每个枚举对象,都可以实现自己的抽象方法
枚举后面的括号可要可不要
public enum Level implements LShow{
LOW(){
@Override
public void show() {
System.out.println("低");
}
},MEDIUM(){
@Override
public void show() {
System.out.println("中");
}
},HIGH(){
@Override
public void show() {
System.out.println("高");
}
};
/*@Override
public void show() {
System.out.println("级别对象在调用show方法");
}*/
}
//每一个枚举对象都可以接口,在枚举常量后加大括号
interface LShow{
void show();
}
调用
Level.LOW.show();
Level.HIGH.show();
注意:
- 一旦定义了枚举,最好不要妄图修改里面的值,除非修改是必要的
- 枚举类默认继承的是java.lang.Enum类而不是Object类
- 枚举类不能有子类,因为其枚举类默认被final修饰
- 只能有private构造方法
- switch中使用枚举时,直接使用常量名,不用携带类名
- 不能定义name属性,因为自带name属性
- 不要为枚举类中的属性提供set方法,不符合枚举最初设计初衷
注解
重点:Annotationd的语法和用法
1.概念