枚舉類型的概述
什么枚舉?
* 枚舉指的是在一定范圍內(nèi)取值,這個(gè)值必須是枚舉類型中的任意一個(gè),而且只能取一個(gè)
*
* 枚舉的特點(diǎn):
*? ? ? ? ?1.必須在規(guī)定的范圍內(nèi)取值
* ? 2.這個(gè)值只能取一個(gè)
* ?
* 枚舉的本質(zhì)就是一個(gè)類
*
*/
public class EnumDemo01 {
// ? ? ? ?private int state;
// ? ? ? ?private GAME2 state;
// ? ? ? ?private GAME3 state;
? ? ? ?private GAME4 state;
? ? ? ?public void test() {
// ? ? ? ? ? ? ? ?state = GAME.START;
// ? ? ? ? ? ? ? ?state = -1;
// ? ? ? ? ? ? ? ?state = GAME2.VICTORY;
// ? ? ? ? ? ? ? ?state = new GAME2();
// ? ? ? ? ? ? ? ?state = GAME3.END;
// ? ? ? ? ? ? ? ?state = new GAME3();
// ? ? ? ? ? ? ? ?state = -1;
? ? ? ? ? ? ? ?state = GAME4.DEFEAT;
// ? ? ? ? ? ? ? ?state = new GAME4();
// ? ? ? ? ? ? ? ?state = -1;
? ? ? ?}
}
// 版本一
class GAME{
? ? ? ?public static final int START = 0x0001;
? ? ? ?public static final int END = 0x0002;
? ? ? ?public static final int RUNNING = 0x0003;
? ? ? ?public static final int STOP = 0x0004;
? ? ? ?public static final int VICTORY = 0x0005;
? ? ? ?public static final int DEFEAT = 0x0006;
}
// 版本二
class GAME2{
? ? ? ?public static final GAME2 START = new GAME2();
? ? ? ?public static final GAME2 END = new GAME2();
? ? ? ?public static final GAME2 RUNNING = new GAME2();
? ? ? ?public static final GAME2 STOP = new GAME2();
? ? ? ?public static final GAME2 VICTORY = new GAME2();
? ? ? ?public static final GAME2 DEFEAT = new GAME2();
}
// 版本三
class GAME3{
? ? ? ?private GAME3() {}
? ? ? ?public static final GAME3 START = new GAME3();
? ? ? ?public static final GAME3 END = new GAME3();
? ? ? ?public static final GAME3 RUNNING = new GAME3();
? ? ? ?public static final GAME3 STOP = new GAME3();
? ? ? ?public static final GAME3 VICTORY = new GAME3();
? ? ? ?public static final GAME3 DEFEAT = new GAME3();
}
// 版本四
enum GAME4{
? ? ? ?START, END, RUNNING, STOP, VICTORY, DEFEAT
}
枚舉類型成員的特點(diǎn)
枚舉既然本質(zhì)是一個(gè)類,那么枚舉里面有沒有 成員變量姐帚,成員方法,構(gòu)造方法卧土,靜態(tài)方法惫皱,抽象方法? 有的話又有意義嗎?
*
* 1.枚舉的構(gòu)造方法必須私有
*
* 2.枚舉當(dāng)中默認(rèn)有一個(gè)私有的無參構(gòu)造方法尤莺,如果你寫了一個(gè)帶參的構(gòu)造方法旅敷,那么會(huì)覆蓋無參構(gòu)造方法,所以編譯報(bào)錯(cuò)
*
* 3.枚舉里面的抽象方法是有意義的媳谁,其他成員沒有意義
*
* 4.枚舉的前面必須是枚舉的常量成員
*
枚舉類型方法
String name() 返回枚舉的名稱
* ?int ordinal() 返回枚舉的索引
* ?static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) 返回枚舉對(duì)象
* ?
* ?valueOf(String name) 生成枚舉對(duì)象
* ?values() 返回所有的枚舉對(duì)象的數(shù)組
* ?
* ?要求大家能夠?qū)⒚杜e的 對(duì)象/ 索引 / 名稱 進(jìn)行相互轉(zhuǎn)換
*/
public class EnumDemo04 {
? ? ? ?public static void main(String[] args) {
? ? ? ? ? ? ? ?// 獲取枚舉對(duì)象
// ? ? ? ? ? ? ? ?Weekend w = Weekend.valueOf(Weekend.class, "MONDAY");
// ? ? ? ? ? ? ? ?System.out.println(w);
// ? ? ? ? ? ? ? ?
// ? ? ? ? ? ? ? ?// 獲取枚舉對(duì)象
// ? ? ? ? ? ? ? ?Weekend w2 = Weekend.MONDAY;
// ? ? ? ? ? ? ? ?System.out.println(w2);
// ? ? ? ? ? ? ? ?
// ? ? ? ? ? ? ? ?// 獲取枚舉對(duì)象
// ? ? ? ? ? ? ? ?Weekend w3 = Weekend.valueOf("MONDAY");
// ? ? ? ? ? ? ? ?System.out.println(w3);
// ? ? ? ? ? ? ? ?medhod1();
// ? ? ? ? ? ? ? ?method2();
? ? ? ? ? ? ? ?method3();
? ? ? ?}