百度百科
首先我们通过百度百科来了解一下JAVA的枚举类型。
枚举型是四种基本数据类型之一。常量、字符型、布尔型可以用来表达数,字符,真假的描述。但我们还是觉得有点缺欠:它们不能方便地进行一些标识符的描述,如:红,橙,黄,绿,青,蓝,紫七种颜色,要在数据类型中要把它们直接表达出来,我们觉得有障碍。而在计算机内有没有这种数据类型,能够很方便地将它们表示出来?有,枚举型能办到。用四种基本数据类型不便表示的标识符,而且这些标识符的数量是有限的,我们可以用枚举的方法来表达它,把要用的所有标识符全部枚举出来。这种方法比较接近自然语言的表达。
简单来说枚举就是可以定义一些固定值的一种类型,那么有同学会问了,我们用final也可以实现固定值的效果啊。那我们就继续让下看(枚举类型的源码就是用final来实现的,也为我们提供了一些便利);
枚举的语法
定义:
[修饰符] enum 枚举名{
枚举值1,枚举值2,枚举值3,...;
}
使用:
枚举名.枚举值
例:
public enum Sex {
MAN,WOMAN;
}
例:
Sex.MAN
枚举的底层
把枚举对应的源文件通过javac 命令进行编辑(Sex.java),那么就会产生一个字节码文件,生成一个Sex.class的class文件。再通过javap Sex进行反编译
Compiled from "Sex.java"
public final class com.ymf.springboot.Sex extends java.lang.Enum<com.ymf.springboot.Sex> {
public static final com.ymf.springboot.Sex MAN;
public static final com.ymf.springboot.Sex WOMAN;
public static com.ymf.springboot.Sex[] values();
public static com.ymf.springboot.Sex valueOf(java.lang.String);
static {};
}
枚举的本质就是一个使用final的修饰类,并且继承了"java.lang.Enum"这个类
1.首先我们应该知道final修饰的类是不可以被继承
2.“java.lang.Enum” 是所有枚举类的老祖宗
3.枚举值就是对应枚举类型的实例,并且默认使用了"public static final"来修饰,也就意味着枚举值就是一个枚举类型的"全局静态常量"
所有我们使用枚举类型的时候要使用类名带上属性名了;
4.我们对应枚举值一个常用静态的方法 values()
public static com.ymf.springboot.Sex[] values();
看名字可想而知就是 返回该枚举类型中定义的所有枚举值
枚举的使用场合
场合:对于一些固定值的描述,那么就可以使用枚举来实现
例如:描述"性别"、“春夏秋冬”、"每一周的星期几"等等
枚举在switch中的使用
注意:在switch选择结构中,case后面的枚举值省略"枚举名字"来操作
@Test
public void test(){
Sex sex = Sex.MAN;
switch (sex){
case MAN:
break;
case WOMAN:
break;
}
}
//可以省略default