一、枚舉是什麼?java
Java中的枚舉實際上是一種語法糖,在 JDK 1.5以後出現,用來表示固定且有限個的對象。好比一個季節類有春、夏、秋、冬四個對象;一個星期有星期一到星期日七個對象。這些明顯都是固定的,且有限個。ide
二、枚舉類和普通類的區別post
①、使用 enum 定義的枚舉類默認繼承 java.lang.Enum 類,即枚舉類是不能再繼承別的類了。而普通類的通常父類默認是 Object測試
②、枚舉類的構造器只能使用 private 定義,而普通類的還能夠用 public 修飾this
③、枚舉類的全部實例必須在枚舉類中顯示列出(,分隔 ;結尾),列出的實例系統會默認自動添加 public static final 修飾url
④、全部的枚舉類都提供了一個 values() 方法,能夠用來遍歷枚舉值spa
三、怎麼用枚舉?.net
首先咱們看,以一個季節類有春、夏、秋、冬四個對象爲例:在 JDK 1.5之前是怎麼表示的呢?code
建立一個 季節類:對象
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
|
public
class
Season {
//屬性不能修改,用 final 修飾
private
final
String name;
private
final
String desc;
//由於枚舉類的對象是有限的,即咱們不能再外面 new Season(),因此構造器私有化
private
Season(String name,String desc) {
this
.name = name;
this
.desc = desc;
}
//不能再外面new Season(),那麼內部必須建立出對象
//外界直接經過類名來訪問,用 static 修飾
//外界不能修改,用 final 修飾
public
static
final
Season SPRING =
new
Season(
"春天"
,
"春暖花開"
);
public
static
final
Season SUMMER =
new
Season(
"夏天"
,
"炎炎盛夏"
);
public
static
final
Season FALL =
new
Season(
"秋天"
,
"秋高氣爽"
);
public
static
final
Season WINTER =
new
Season(
"冬天"
,
"大雪紛飛"
);
@Override
public
String toString() {
return
"Season [name="
+ name +
", desc="
+ desc +
"]"
;
}
}
|
測試:
1
2
3
4
5
6
7
8
9
|
public
class
SeasonTest {
public
static
void
main(String[] args) {
System.out.println(Season.SPRING);
System.out.println(Season.SUMMER);
System.out.println(Season.FALL);
System.out.println(Season.WINTER);
}
}
|
結果爲:
1
2
3
4
|
Season [name=春天, desc=春暖花開]
Season [name=夏天, desc=炎炎盛夏]
Season [name=秋天, desc=秋高氣爽]
Season [name=冬天, desc=大雪紛飛]
|
使用 Enum 來表示季節類:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public
enum
SeasonEnum {
//必須在第一行寫出有哪些枚舉值
SPRING(
"春天"
,
"春暖花開"
),
SUMMER(
"夏天"
,
"炎炎盛夏"
),
FALL(
"秋天"
,
"秋高氣爽"
),
WINTER(
"冬天"
,
"大雪紛飛"
);
private
final
String name;
private
final
String desc;
private
SeasonEnum(String name, String desc) {
this
.name = name;
this
.desc = desc;
}
}
|
測試:
1
2
3
4
5
6
7
8
|
public
static
void
main(String[] args) {
System.out.println(SeasonEnum.SPRING);
//SPRING
//用 values() 來獲取全部的枚舉值
for
(SeasonEnum s : SeasonEnum.values()){
System.out.println(s);
}
}
|
枚舉類還能實現接口:
第一步:定義一個接口,方法是返回季節的月份
1
2
3
4
5
|
public
interface
SeasonEnumImpl {
//用來返回季節的月份
String getMonth();
}
|
第二步:季節類實現接口,並實現接口中的方法
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
|
public
enum
SeasonEnum
implements
SeasonEnumImpl{
//必須在第一行寫出有哪些枚舉值
SPRING(
"春天"
,
"春暖花開"
){
@Override
public
String getMonth() {
return
"12-2"
;
}
},
SUMMER(
"夏天"
,
"炎炎盛夏"
){
@Override
public
String getMonth() {
return
"3-5"
;
}
},
FALL(
"秋天"
,
"秋高氣爽"
){
@Override
public
String getMonth() {
return
"6-8"
;
}
},
WINTER(
"冬天"
,
"大雪紛飛"
){
@Override
public
String getMonth() {
return
"9-11"
;
}
};
private
final
String name;
private
final
String desc;
private
SeasonEnum(String name, String desc) {
this
.name = name;
this
.desc = desc;
}
}
|
測試:
1
2
3
4
5
6
7
8
9
|
public
static
void
main(String[] args) {
System.out.println(SeasonEnum.SPRING);
//SPRING
//用 values() 來獲取全部的枚舉值
for
(SeasonEnum s : SeasonEnum.values()){
System.out.println(s.getMonth());
}
}
|
結果爲:
1
2
3
4
5
|
SPRING
12
-
2
3
-
5
6
-
8
9
-
11
|
注意:
①、枚舉類能夠做爲 switch--case 的表達式(JDK 1.5之後)
②、若是枚舉類的對象只有一個,那麼能夠做爲單例模式的實現