枚举类型
- 枚举的定义,
enum 类名{
枚举值...
}
- 枚举值一般是大写字母,多个枚举值之间用逗号相隔,且枚举值默认的修饰符是
public static final
。 - 编译器会生成相应的类,该类是
final
并继承自java.lang.Enum
抽象类。 - 可以在枚举类型中添加一些构造器、方法(包括main)和域。构造器只是在构造枚举常量的时候被调用。但是必须在声明完枚举实例后使用分号分开。
- 可以为枚举类型定义抽象方法,并在域中实现。此外我们可以覆盖
Enum
抽象中的toString()
方法。 - Enum抽象类方法:
方法 | 描述 |
---|---|
int ordinal() | 返回枚举常量在enum声明中的位置,位置从0开始 |
String toString() | 返回枚举常量名 |
String name() | 返回此枚举常量的名称 |
int compareTo(E other) | 如果枚举常量出现在other之前,则返回一个负值;如果this==other ,则返回0;否则返回正值。枚举常量的出现次序可由ordinal() 获取。 |
static Enum valueOf(Class ,String ) | 返回指定名字,给定类的枚举常量 |
import java.util.Arrays;
public class EnumTest{
public static void main(String[] args){
//String s="Small";
Size sizeMed=Size.Medium;
System.out.println("sizeMed is "+sizeMed);
System.out.println("sizeMed.getAbbreviation() is "+sizeMed.getAbbreviation());
Size sizeExtra_Large=Enum.valueOf(Size.class,"Extra_Large");//Enum抽象类方法,返回指定名称,给定枚举类的常量
System.out.println("Enum.valueOf() is "+sizeExtra_Large);
String medium=sizeMed.toString();//返回枚举常量名
String medium1=sizeMed.name();//返回枚举常量的名称
System.out.println("sizeMed.toString() is "+medium+"; medium1 is "+medium1);
Size[] sizes=Size.values();//静态values()方法,编译器自动添加,返回一个包含全部枚举值的数组
System.out.println("Size.values is "+Arrays.toString(sizes));
int n=sizeMed.ordinal();//获取枚举变量在枚举类型中声明的次序,下标从0开始
System.out.println("sizeMed.ordinal() is "+n);
Size sizeLarge=Size.valueOf("Large"); //编译器自动添加,静态方法根据变量生成枚举变量
sizeLarge.sayHello();
System.out.println("Size.valueOf(String) is "+sizeLarge);
}
enum Size { //定义EnumTest类的内部,也可以定义外部
Small("S"){
@Override //实现定义的抽象方法
public void sayHello() {
System.out.println("Hello,i am Small");
}
}, Medium("M"){
@Override
public void sayHello() {
System.out.println("Hello,i am Medium");
}
}, Large("L"){
@Override
public void sayHello() {
System.out.println("Hello,i am Large");
}
}, Extra_Large("XL"){
@Override
public void sayHello() {
System.out.println("Hello,i am Extra_Large");
}
};//括号中的字符串将传入构造器中
private String abbreviation;
private Size(String abbreviation) {//构造方法,Small("S")中的"S"将传入该方法中
this.abbreviation=abbreviation;
System.out.println("hello world!");
}
public String getAbbreviation() {
return abbreviation;
}
public abstract void sayHello();
}
}
输出结果:
hello world!
hello world!
hello world!
hello world!
sizeMed is Medium
sizeMed.getAbbreviation() is M
Enum.valueOf() is Extra_Large
sizeMed.toString() is Medium; medium1 is Medium
Size.values is [Small, Medium, Large, Extra_Large]
sizeMed.ordinal() is 1
Hello,i am Large
Size.valueOf(String) is Large
如有错误,欢迎留言指正!