欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JDK5新特性之一“枚举”总结

程序员文章站 2022-07-12 23:14:38
...
JDK1.5加入了一个全新类型的“类”—枚举类型。为此JDK1.5引入了一个新关键字enum。
【并不能说成是一个类,它的真正类型叫枚举,但是它和类又很像。】
我们可以这样来定义一个枚举类型
Public enum Color{
Red;
White;
Blue;
}
然后这样来使用Color myColor = Color.Red;

枚举类型还提供了两个有用的静态方法values()和valueOf()。我们可以很方便地使用它们,例如:
For(Color c : Color.values()) {
System.out.println(c);
}


另外在这里需要补充一个知识点:switch后面可以跟五种类型数据:byte、short、int、char、枚举类型


定义枚举类型时本质上就是在定义一个类别,只不过是很多细节有编译器帮您完成了,所以某些程度上,enum关键字的作用就像是class或interface

当您使用“enum”定义枚举类型时,实质上您定义出来的类型继承自java.lang.Enum类型,而[color=red]每个枚举的成员其实就是您定义的枚举类型的一个实例(Instance)[/color],他们都被预设为final,所以您无法改变他们,他们也是static成员,所以您可以通过类型名称直接使用它们,当然,最重要的,它们都是公开的(public)。


EnumSet的名称说明了其作用,它是在J2SE5.0后加入的新类别,可以协助您建立枚举值的集合,它提供了一系列静态发光法,可以让您指定不同的集合建立方式。

枚举(Enum):我们所定义的每个枚举类型都继承自java.lang.Enum 类,枚举中的每个成员默认都是public static final的。

而每个枚举的成员其实就是您定义的枚举类型的一個实例(Instance)。换句话说,当定义了一个枚举类型后,在编译时刻就能确定该枚举类型有几个实例,分别是什么。在运行期间我们无法再使用该枚举类型创建新的实例了,这些实例在编译期间就已经完全确定下来了。

[size=large][color=red]枚举在实际开发中应用的场合:经常用在用户权限验证的地方,比如将系统里面需要的几种权限类型定义为一个枚举类;对于方法参数只接收有限的几类值的情况;应用的场合都是某个类型它的对象实例的个数已经完全确定了,没法在运行的时候再去生成实例。[/color][/size]


下面是一些枚举相关的练习类,经常查看:
package com.shengshiyuan5;

public enum Color {

Red, White, Blue, Black

}

package com.shengshiyuan5;

public class ColorTest {
public static void main(String[] args) {
Color myColor = Color.Blue;
System.out.println(myColor);

for (Color c : Color.values()) {
System.out.println(c);
}
}
}


package com.shengshiyuan5;

public class EnumTest {
public static void doOp(OpConstant opConstant) {
switch (opConstant) {
case TURN_LEFT:
System.out.println("向左转");
break;
case TURN_RIGHT:
System.out.println("向右转");
break;
case SHOOT:
System.out.println("射击");
break;
}
}

public static void main(String[] args) {
doOp(OpConstant.SHOOT);
}
}

enum OpConstant {
TURN_LEFT, TURN_RIGHT, SHOOT
}


package com.shengshiyuan5;

public enum Coin {
// 就像Class一样,生成对象的时候去调用构造方法,这里也相似,在编译的时候每个成员都会生成一个Coin类型的实例,在生成实例的过程中调用Coin(String
// value)方法需要传递一个参数。
penny("hello"), nickel("world"), dime("welcome"), quarter("hello world");

private String value;

public String getValue() {
return value;
}

Coin(String value) {
this.value = value;
}

public static void main(String[] args) {
Coin coin = Coin.quarter;
System.out.println(coin.getValue());
}
}



之后又讲解了枚举的集合类EnumSet<E extends Enum<E>>,比较繁琐,而且不经常用到,所以没有总结。
相关标签: 枚举