标签:class pre key -o red color port cas 例子
Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。
Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。
例如定义一个颜色的枚举类。
enum Color
{
RED, GREEN, BLUE;
}
以上枚举类 Color 颜色常量有 RED, GREEN, BLUE,分别表示红色,绿色,蓝色。
enum枚举这个类比较有意思,当你创建完enum后,编译器会自动为你的enum添加toString()方法,能够让你方便的显示enum实例的具体名字是什么。除了 tostring()方法外,编译器还会添加ordinal()方法,这个方法用来表示enum常量的声明顺序,以及values()方法显示顺序的值。
enum可以进行静态导入包,静态导入包可以做到不用输入枚举类名.常量,可以直接使用常量。使用 enum和关键字可以做到静态导入包。
例子:
import static com.company.Color.*;
public class EnumUse {
public static void main(String[] args) {
Color color=RED;
}
}
例子:
enum Color
{
RED, GREEN, BLUE;
}
public class Test
{
// 执行输出结果
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1);
}
}
执行以上代码输出结果为:
RED
枚举类也可以声明在内部类中。
例子:
public class Test
{
enum Color
{
RED, GREEN, BLUE;
}
// 执行输出结果
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1);
}
}
执行以上代码输出结果为:
RED
每个枚举都是通过 Class 在内部实现的,且所有的枚举值都是 public static final 的。
以上的枚举类 Color 转化在内部类实现:
class Color
{
public static final Color RED = new Color();
public static final Color BLUE = new Color();
public static final Color GREEN = new Color();
}
可以使用 for 语句来迭代枚举元素。
例子:
enum Color
{
RED, GREEN, BLUE;
}
public class MyClass {
public static void main(String[] args) {
for (Color myVar : Color.values()) {
System.out.println(myVar);
}
}
}
执行以上代码输出结果为:
RED
GREEN
BLUE
枚举类常应用于 switch 语句中。
例子:
enum Color
{
RED, GREEN, BLUE;
}
public class MyClass {
public static void main(String[] args) {
Color myVar = Color.BLUE;
switch(myVar) {
case RED:
System.out.println("红色");
break;
case GREEN:
System.out.println("绿色");
break;
case BLUE:
System.out.println("蓝色");
break;
}
}
}
执行以上代码输出结果为:
蓝色
enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Seriablizable 和 java.lang.Comparable 两个接口。
values(), ordinal() 和 valueOf() 方法位于 java.lang.Enum 类中:
枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。
枚举既可以包含具体方法,也可以包含抽象方法。 如果枚举类具有抽象方法,则枚举类的每个实例都必须实现它。
枚举类和普通类的区别:
1、枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了 java. lang Enum类,而不是默认继承 Object类,因此枚举类不能显式继承其他父类。其中 java. lang Enum类实现了java. lang Serializable和 java. lang. Comparable两个接口。
2、使用enum定义、非抽象的枚举类默认会使用 final修饰,因此枚举类不能派生子类。
3、枚举类的构造器只能使用 private访问控制符,如果省略了构造器的访问控制符,则默认使用private修饰;如果强制指定访问控制符,则只能指定 private修饰符。
4、枚举类的所有实例必须在枚举类的第一行显式列出,否则这个枚举类永远都不能产生实例。列出这些实例时,系统会自动添加 public static final修饰,无须程序员显式添加
除此之外,enum还和 Class类有交集,在Cass类中有三个关于Enum的方法
getEnumConstants():T[]
getEnumConstantsShared():T[]
isEnum():boolean
前面两个方法用于获取enum常量,isEnum 用于判断是否是枚举类型的。
除了Enum外,还需要知道两个关于枚举的工具类,一个是EnumSet,一个是EnumMap。
EnumSet是JDK1.5引入的, EnumSet的设计充分考虑到了速度因素,使用 EnumSet可以作为Enum的替代者,因为它的效率比较高。
EnumMap是一种特殊的Map,它要求其中的key键值是来自一个enum。因为 EnumMap速度也很快,我们可以使用 EnumMap作为key的快速查找。
总的来说,枚举的使用不是很复杂,它也是Java中很小的一块功能,但有时却能够因为这一个小技巧,能够让你的代码变得优雅和整洁。
标签:class pre key -o red color port cas 例子
原文地址:https://www.cnblogs.com/yt0617/p/14443322.html