1、将枚举定义为类,可以具有构造函数、方法以及实例变量。enum关键字。枚举常量,被隐式声明为公有静态final成员,类型为声明它们的类型,自类型化的。可以创建枚举类型的变量,但不能使用new实例化枚举。如,
Enum Apple { Jonathan, GoldenDel, RedDel, Winesap, Cortland }
Apple ap; ap = Apple.RedDel; if(ap == Apple.GoldenDel) ...
枚举值也可以用于控制switch语句。枚举常量的名称没有使用枚举类型名进行限定,例如,是case RedDel,而不是case Apple.RedDel。否则会有编译时错误。
当显示枚举常量时,会输出枚举常量的名称。如,System.out.println(Apple.RedDel);输出RedDel。
枚举有两个限制:一,不能继承其他类;二,不能是超类,即不能扩展。
2、values()和valueOf()方法
public static enum-type [] values()
返回一个包含枚举常量列表的数组。可以使用for-each语句。例如for(Apple a: Apple.values()) {...}
public static enm-type valueOf(String str)
返回与传递到参数str的字符串相对应的枚举常量。
3、java枚举是类类型
可以为枚举提供构造函数、添加实力变量和方法,甚至可以实现接口。每个枚举常量都是所属枚举类型的对象。
如果为枚举类型定义了构造函数,那么当创建每个枚举常量时都会调用该构造函数。
枚举继承自Enum类,java.lang.Enum。三个常用的方法:
final int ordinal() //获取用于指示枚举常量在常量列表中位置的值,即原始值。
final int compareTo(enum-type e) //比较相同类型的两个枚举常量的原始值。返回正负数0.如ap.compareTo(ap1)。
可以使用equals()方法来比较枚举常量和其他对象的相等性,当两个对象都引用同一个枚举中相同的常量时才相等。
可以使用"=="比较两个枚举引用。
最后例子,
enum Apple {
Jonathan(10), GoldenDel(9), RedDel(12), Winesap(15), Cortland(8);
private int price;
Apple(int p) { price = p; } //函数可以重载
int getPrice() { return price; }
}
class EnumDemo {
public static void main(String args[]) {
Apple ap;
System.out.println("Winesap costs " + Apple.Winesap.getPrice() + " cents.\n");
System.out.println("All apple price:");
for(Apple a: Apple.values())
System.out.println(a+ " costs " + a.getPrice() + " cents.");
}
}
结果如下:
Winesap costs 15 cents.
All apple price:
Jonathan costs 10 cents.
GoldenDel costs 9 cents.
RedDel costs 12 cents.
Winesap costs 15 cents.
Cortland costs 8 cents.
于2013/04/10