在java5增加了一个enum关键字,用来定义枚举类,相信好多的小伙伴学习java很久了,但是对于枚举类是空白的,只知道有这么个东西,奶奶不疼舅舅不爱的,对于使用更是没有应用过,相信下面的demo你一定会对枚举产生很大的兴趣,这个兄弟可以灰常的方便以及实现的!
使用枚举类会默认使用finala修改,枚举类不能派生子类。
- 代码时间
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38enum SeasonEnum{
//定义四个实例,春,夏,秋,冬
SPRING,SUMMER,FALL,WINTER;
}
public class JudgeTest {
public void judge(SeasonEnum s){
//swith语句里的表达式可以为枚举值
switch (s)
{
case SPRING:
System.out.println("春天到了,又到了动物交配的季节!");
break;
case SUMMER:
System.out.println("夏天,小青蛙呱呱叫");
break;
case FALL:
System.out.println("秋天,是个分手的好季节");
break;
case WINTER:
System.out.println("老婆孩子热炕头ing");
break;
}
}
}
public class EnumTest {
public static void main(String[] args) {
//打印枚举类型中的所有实例
for (SeasonEnum s : SeasonEnum.values()) {
System.out.println(s);
}
System.out.println();
//传入指定的实例,输出方法中符合条件的结果
new JudgeTest().judge(SeasonEnum.SPRING);
}
} - 运行结果
在java中对象之间判断是否相等常用的是equalse,在枚举中使用的是“==”
1 | public class EnumTest { |
java.lang.Enum类中的其他方法:
(1)int compareTo(E o):
用于与指定枚举对象比较顺序,同一个枚举实例只能与相同类型的枚举实例进行比较。如果该枚举对象位于指定枚举对象之后,则返回正整数,如果位置指定枚举对象之前,则返回负整数,否则返回零。
(2)String name():
返回此枚举实例的名称,这个名称就是定义枚举类时列出的所有枚举值之一,不过大多数情况下使用的toString方法,此方法返回的结果更加友好。
(3)int ordinal():
返回枚举值在枚举类中的索引值(就是枚举值在枚举声明 中的位置,枚举值 的索引 从0开始)。
枚举类的成员变量、方法和构造器
- 代码在这样的情况下,是正常的,如果将g.name=”男”设置为男,那么整个逻辑就特别的混乱,我们可不可以直接 将枚举中的值 给它指定好,使用者不能改变,那我们来试试
1
2
3
4
5
6
7
8
9
10
11
12
13
14public class GenderTest {
public static void main(String[] args) {
//通过Enum中的valueOf方法来获取指定枚举类的枚举值
Gender g = Enum.valueOf(Gender.class, "FEMALE");
//设置值
g.name="女";
System.out.println(g+"代表:"+g.name);
}
}
enum Gender{
MALE,FEMALE;
public String name;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39public enum Gender {
MALE,FEMALE;
private String name;
public void setName(String name){
switch (this)
{
case MALE:
if (name.equals("男")) {
this.name = name;
}else{
System.out.println("参数错误");
return ;
}
break;
case FEMALE:
if (name.equals("女")) {
this.name = name;
}else{
System.out.println("参数错误");
return ;
}
break;
}
}
public String getName() {
return this.name;
}
}
public class GenderTest {
public static void main(String[] args) {
Gender g = Gender.valueOf("FEMALE");
g.setName("女");
System.out.println(g+"代表:"+g.getName());
g.setName("男");
System.out.println(g+"代表:"+g.getName());
}
}- 运行结果
第一次运行正确,但是我们如果设置姓名为男时,还是不行,因为第第一次初始化时已经设置为女再设置就会报错。那么这种方式还是得修改:
- 运行结果
1 | public enum Gender { |
- 结果