一、枚舉類
1.如何自定義枚舉類
2.如何使用enum關(guān)鍵字定義枚舉類:將枚舉類對(duì)象相同部分刪掉,同時(shí)中間用逗號(hào)分隔。
①常用的方法:values() valueOf(String name)
②如何讓枚舉類實(shí)現(xiàn)接口:可以讓不同的枚舉類對(duì)象調(diào)用被重寫的抽象方法,執(zhí)行的效果不同。(相當(dāng)于讓每個(gè)對(duì)象重寫抽象方法)
(實(shí)現(xiàn)方法:在相鄰枚舉對(duì)象中間用大括號(hào)包住,重寫抽象方法)
必須在枚舉類的第一行聲明枚舉類對(duì)象。
枚舉類和普通類的區(qū)別:
使用 enum 定義的枚舉類默認(rèn)繼承了 java.lang.Enum 類;
枚舉類的構(gòu)造器只能使用 private 訪問(wèn)控制符;
枚舉類的所有實(shí)例必須在枚舉類中顯式列出(, 分隔 ; 結(jié)尾). 列出的實(shí)例系統(tǒng)會(huì)自動(dòng)添加 public static final 修飾;
JDK 1.5 中可以在 switch 表達(dá)式中使用Enum定義的枚舉類的對(duì)象作為表達(dá)式, case 子句可以直接使用枚舉值的名字, 無(wú)需添加枚舉類作為限定。
枚舉類的主要方法:
values()方法:返回枚舉類型的對(duì)象數(shù)組。該方法可以很方便地遍歷所有的枚舉值。
valueOf(String str):可以把一個(gè)字符串轉(zhuǎn)為對(duì)應(yīng)的枚舉類對(duì)象。要求字符串必須是枚舉類對(duì)象的“名字”。如不是,會(huì)有運(yùn)行時(shí)異常。
package com.atguigu.java1;
public class TestSeason1 {
public static void main(String[] args){
Season1 spring = Season1.SPRING;
System.out.println(spring);
spring.show();
System.out.println(spring.getSeasonName());
System.out.println();
//1.values():
Season1[] seasons = Season1.values();
for(int i = 0;i < seasons.length;i++){
System.out.println(seasons[i]);
}
//2.valuesOf(String name):str里傳入的是字符串,輸出的是對(duì)象;
//要求傳入的形參name是枚舉類對(duì)象的名字,否則報(bào)IllegalArgumentException
String str = "SPRING";
Season1 sea = Season1.valueOf(str);
System.out.println(sea);
System.out.println();
//也可以輸出一下線程的生命周期
Thread.State[] states = Thread.State.values();
for (int i = 0; i < states.length; i++) {
System.out.println(states[i]);
}
}
}
interface Info{
void show();
}
//枚舉類
enum Season1 implements Info{
SPRING("spring","春暖花開(kāi)"){
public void show(){
System.out.println("春天在哪里啊?");//實(shí)現(xiàn)枚舉對(duì)象的不同show()方法
}
},
SUMMER("summer","夏日炎炎"){
public void show(){
System.out.println("夏天在這里");
}
},
AUTOMN("automn","秋高氣爽"){
public void show(){
System.out.println("秋天是分手的季節(jié)");
}
},
WINTER("winter","白雪皚皚"){
public void show(){
System.out.println("冬天里的一把火");
}
};//enum自己默認(rèn)一些東西,可以把相同的部分刪掉
private final String seasonName;
private final String seasonDesc;
private Season1(String seasonName, String seasonDesc){
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
public void show(){
System.out.println("這是一個(gè)季節(jié)");
}
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
@Override
public String toString() {
return "Season [seasonName=" + seasonName + ", seasonDesc="
+ seasonDesc + "]";
}
}