Java之列舉篇

2021-06-26 08:03:54 字數 1606 閱讀 1983

出處:

1、為什麼要出現列舉:

在現實生活中,有許多實體有且僅有特定的幾個屬性

(例如:月份只有1~12月,性別只有男女,季節只有四季……等)

若將其型別定義成常量,則不可避免地出現非法引數的問題

(例如:13月,第三個性別,第五個季節……等)

因此,對於上述型別的物件,必須規定其特定的屬性值為列舉型別,即:僅能從已有的幾個值中挑選,不可以自己建立新的屬性值

2、列舉的關鍵概念:

使用者若想要建立某個物件

則 只能從已有的該型別物件裡面

挑選 而 不能自己

自由建立

新的該型別物件

例如:使用者若想要乙個季節型別的物件

則只能從已有的春夏秋冬四個型別的物件裡挑選

而不能建立新的季節型別物件

*列舉類的原始實現:

(1)定義乙個類,裡面包含若干個public static final修飾的,自身型別的變數以供外界使用

(2)構造方法私有(即:不可以由外界建立新的物件)

例如:class season() }

*這樣,外界只要把乙個變數定義成season類

那麼這個變數除了取春夏秋冬中任乙個值外,不能取任何其它值

3、列舉類在jdk5.0中的實現:

enum season()

此語法與上述原始實現的作用完全等同,且同樣是

編譯器語法,即:

編譯器在遇到上述語句的時候,會自動將其轉換成之前原始實現的格式

*因此,列舉在本質上仍然是乙個特殊的類,只不過這個類:

(1)內部包含該類的公開靜態常量物件

(2)構造方法必須是私有的

4、列舉類的父類:enum

常用方法:

values()  //靜態方法,返回該列舉類的陣列,內容為該類中所有的列舉值

5、列舉類作為乙個特殊的類的理解:

列舉除了可以定義該類的公開靜態常量物件之外

還可以定義任何另外的屬性和方法,

只是在新增屬性和方法的時候,需要

在列舉值的最後乙個值後面加上分號

例如:enum season()  

// 注意:列舉類的構造方法僅能是private的,即使不用private修飾,也會自動預設為private

public string getname()

}6、列舉類不可以有子類,但是列舉類中的列舉值可以實現列舉類中的抽象方法

例如://定義列舉型別

enum operator

},sub },

mul },

div  };

public abstract double calculate(double a, double b);

}//呼叫該列舉類

operator os = operator.values();

for(operator o:os)

Java之列舉型別

用乙個例子來說明 在程式中規定交通燈的取值只能是 red,green,yellow 取其他值就會報錯,並且還能根據當前顏色知道下個顏色.怎麼實現?一 用普通類來實現 public abstract class trafficlamp 取得下個燈 public abstract trafficlamp...

java基礎之列舉

讓某個型別的變數的值只能取若干個值中的乙個,否則,編譯器報錯。將原先執行時才能發現的問題提前到編譯時揭露。也是jdk1.5新特性 實現原理 1 將建構函式私有化,使其他人無法建立物件 2 定義預定數量的物件,並用public 和final static修飾,供使用者呼叫 3 可以有若干具體或抽象方法...

Java基礎之列舉

列舉 列舉enum 列舉就是要讓某個型別的變數的取值,只能為若干個固定值中的乙個,否則,編譯器報錯 列舉可以讓編譯器在編譯時就可以控制源程式中填寫的非法值,普通變數的方式在開發階段無法實現這一目標。列舉是一種特殊的類,列舉中的每乙個元素都是乙個例項物件 用普通類如何實現列舉功能,定義乙個weekda...