提示:以下是本篇文章正文内容,下面案例可供参考
一、背景与定义
枚举是在JDK1.5以后引入的。主要用途是:将一组常量组织起来,在这之前表示一组常量通常使用定义常量的方式:
public static int final RED = 1;
public static int final GREEN = 2;
public static int final BLACK = 3;
但是上述定义方式有一个明显缺点:如果我想要一个普通的1,电脑可能会把它当成RED。于是我们引进了枚举来组织,也就是拥有了枚举类型,而不是普通的整形1了,其定义方式如下:
public enum TestEnum {
RED,BLACK,GREEN;
}
二、枚举的使用
2.1switch语句
代码如下(示例):
public enum TestEnum {
RED,BLACK,GREEN,WHITE;
public static void main(String[] args) {
TestEnum testEnum=TestEnum.RED;
switch (testEnum) {//会匹配到RED,打印red
case RED:
System.out.println("red");
break;
case BLACK:
System.out.println("black");
break;
case WHITE:
System.out.println("WHITE");
break;
default:
break;
}
}
}
2.2常用方法
代码如下(示例):
public enum TestEnum {
RED,BLACK,GREEN,WHITE;
//values():以数组形式返回枚举类型的所有成员
public static void main(String[] args) {
TestEnum[] testEnums=TestEnum.values();
for(int i=0;i< testEnums.length;i++){
System.out.println(testEnums[i]);
}//打印RED BLACK GREEN WHITE
}
}
=========================================================
public enum TestEnum {
RED,BLACK,GREEN,WHITE;
//ordinal():获取枚举成员的索引位置
public static void main(String[] args) {
TestEnum[]testEnums=TestEnum.values();
for(int i=0;i<testEnums.length;i++){
System.out.println(testEnums[i]+"->"+testEnums[i].ordinal());
}//打印RED->0 BLACK->1 GREEN->2 WHITE->3
}
}
=========================================================
public enum TestEnum {
RED,BLACK,GREEN,WHITE;
//valueOf()把字符串 变成对应的枚举对象
public static void main(String[] args) {
TestEnum testEnum=TestEnum.valueOf("RED");
//如果不是 RED,BLACK,GREEN,WHITE其中之一,运行时会报错
System.out.println(testEnum);//打印RED
}
}
=========================================================
public enum TestEnum {
RED,BLACK,GREEN,WHITE;
//compareTo()比较两个枚举成员在定义时的顺序
public static void main(String[] args) {//ps:我们自己写的枚举类都默认继承Enum类
TestEnum testEnum=TestEnum.valueOf("RED");
System.out.println(RED.compareTo(BLACK));//打印-1
//打印值=RED-BLACK=0-1
System.out.println(BLACK.compareTo(RED));//打印1
System.out.println(BLACK.compareTo(WHITE));//打印-2
}
2.3枚举的构造方法是默认的
public enum TestEnum1 {
RED("red",1),BLACK("black",2),GREEN,WHITE;
public String color;
public int ordinal;
TestEnum1(String color,int ordinal){
//当枚举对象有参数后,需要提供相应的构造函数
this.color=color;
this.ordinal=ordinal;
}
private TestEnum1(){//这个构造方法你不写也是默认的,
// ps:private也是默认的(这里可以不写private),枚举也是不可以被继承的
}
}
三、枚举的优缺点
优点:
- 枚举常量更简单安全 。
- 枚举具有内置方法 ,代码更优雅
缺点: - 不可继承,无法扩展
总结
1、枚举本身就是一个类,其构造方法默认为私有的,且都是默认继承与 java.lang.Enum
2、枚举可以避免反射和序列化问题
3、枚举的优点和缺点