Java列舉特殊類及其靜態常量例項

2021-06-23 06:44:08 字數 1769 閱讀 2474

1.作用

為什麼要有列舉?

問題: 要定義星期幾或性別的變數,該怎麼定義?假設用1-7分別表示星期一到星期日,但有人可能會寫成int weekday = 0;或即使使用常量方式也無法阻止意外.

列舉就是要讓某個型別的變數的取值只能為若干個固定值中的乙個,否則,編譯器就會報錯!

列舉可以讓編譯器在編譯時就可以控制源程式中填寫的非法值,普通變數的方式在開發階段無法實現這一目標.

2.普通類模擬其原理

sun和mon的示例:元素相當於實現了遍歷類的抽象方法的子類;

public class enumtest 

} public abstract class weekday1

// 元素定義為有關鍵字的內部類

public final static weekday1 sun=new weekday1()

};public final static weekday1 mon=new weekday1()

};public abstract weekday1 nextday();

/* public final static weekday sun=new weekday();

public final static weekday mon=new weekday();

public weekday nextday()else

}*/public string tostring()

}

模擬可知:

(1)內部元素都是靜態常量!

(2)列舉也是抽象類,可以建立抽象方法返回本身型別;

(3)每乙個靜態常量元素都可以實現抽象方法,成為乙個例項物件!

知識擴充套件:通過抽象方法nextday()過載,每乙個列舉元素都實現為乙個類,簡化了if-else的書寫;

3. jdk1.5列舉的建立

關鍵字 enum

列舉就是要讓某個型別的變數的取值只能為若干固定值之中的乙個,其中的每乙個元素都是該類的乙個物件!相當於內部類.

定義列舉類的關鍵字enum,

示例:public enum weekday

4.enum的方法和元素呼叫enum類的構造方法

四大重點方法:

列舉元素.name() 

列舉元素.ordinal() 

enum類.valueof("args") 

enum類.values("args")

示例:

public class enumtest 

// 定義列舉類的關鍵字enum,定義後內部元素靜態載入完畢;

public enum weekday

private weekday(int day)

}}

5.實現帶有抽象方法的列舉

紅綠燈的實現示例:

enum trafficlamp   

},yellow(40)

},green(45)

};public abstract trafficlamp nextlamp();//抽象類不寫body

private int time;

private trafficlamp(int tiem)

}public class enumdemo

}

列舉與靜態常量比較

靜態常量是列舉模式的應用 它有很多缺點 型別不安全 靜態常量可以隨意增加使用或操作 無命名空間,脆弱 某常量值改變後客戶端如果不編譯仍能使用,但表現卻是未定義的 靜態常量列印值為數字,也不具提示性等等 客戶端未編譯有待推敲?this pattern has many problems,such as...

列舉類及其使用

一 列舉類的使用 列舉類的理解 類的物件只有有限個,確定的。我們稱此類為列舉類 當需要定義一組常量時,強烈建議使用列舉類 如果列舉類中只有乙個物件,則可以作為單例模式的實現方式 public class seasontest 自定義列舉類 class season 3.提供當前列舉類的多個物件 pu...

常量和列舉 常量類的區別

一 實體常量類 實體常量類 author administrator date 2018 7 21 public class constclass1 jdk編譯時,直接把常量編譯到使用的地方。在修改變數值後,其它類有可能會出現編譯到舊常量值的問題。2 只能用equals比較,效能較低。無法保證型別是...