列舉
列舉
需求:某些方法所接收的資料必須是在固定範圍之內。
方法一:自定義一個類,然後是私有化建構函式,在自定義類中建立本類的物件對外使用。
方法二:使用列舉類解決。
列舉使用場景:
一些方法在執行時,它需要的資料不能是任意的,而必須是一定範圍內的值,Java5以後可以直接使用列舉予以解決。
比如: 方向 , 性別 、 季節 、 星期......
//自定義一個性別類 class Gender{ String value; public static final Gender man = new Gender("男"); public static final Gender woman = new Gender("女"); private Gender(String value) { this.value = value; } } class Person{ private String name; private Gender sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public Gender getSex() { return sex; } public void setSex(Gender sex) { this.sex = sex; } } public class Demo6 { public static void main(String[] args) { Person p = new Person(); p.setName("小紅"); p.setSex(Gender.woman); System.out.println("名字:"+ p.getName()+" 性別:"+ p.getSex().value); } }
列舉:一些方法在執行時,它需要的資料不能是任意的,而必須是一定範圍內的值,可以直接使用列舉予以解決。
列舉類的定義格式:
enum 類名{ //列舉值 }
列舉要注意的細節:
- 列舉類也是一個特殊的類。
- 列舉值預設的修飾符是public static final。
- 列舉值就是列舉值所屬的類的型別,列舉值是指向了本類的物件的。
- 列舉類的構造方法預設的修飾符是private的。
- 列舉類可以定義自己的成員變數與成員函式。
- 列舉類可以自定義建構函式,但是建構函式的修飾符必須是private。
- 列舉類可以存在抽象的方法,但是列舉值必須要實現抽象的方法。
- 列舉值必須要位於列舉類的第一個語句。
使用列舉簡化上述書寫:
/* //自定義一個性別類 class Gender{ String value; public static final Gender man = new Gender("男"); public static final Gender woman = new Gender("女"); private Gender(String value) { this.value = value; } } */ enum Gender{ man("男"),woman("女"); String value; private Gender(String value){ this.value = value; } } class Person{ private String name; private Gender sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public Gender getSex() { return sex; } public void setSex(Gender sex) { this.sex = sex; } } public class Demo6 { public static void main(String[] args) { Person p = new Person(); p.setName("小紅"); p.setSex(Gender.woman); System.out.println("名字:"+ p.getName()+" 性別:"+ p.getSex().value); } }
列舉的基本使用:
enum Sex{ //man,woman;//列舉值 //相當於:public static final Sex man = new Sex(); man("男"){ //帶參的構造方法,所以沒有了無參的構造方法了 @Override public void run() { System.out.println("我是男性,要跑1000米"); } },woman("女"){ @Override public void run() { System.out.println("我是女性,只要跑800米"); } }; //列舉值 String value; //成員 變數 //public static final Sex man = new Sex(); //建構函式 private Sex(Stringvalue){ this.value = value; } //成員函式 public void getValue(){ System.out.println("value :"+ value); } public abstract void run(); } public class Demo7 { public static void main(String[] args) { Sex sex = Sex.man; //獲取到了列舉類的物件 sex.value = "男"; sex.getValue();//value:男 sex.run(); } }
switch適用的資料型別: byte \ char \short \ int \ String\列舉型別
注意:case語句後面跟的列舉值,只需要單寫列舉值即可,不需要再宣告該 列舉值是屬於哪個列舉類的。
//季節列舉類 enum Season{ spring,summer,autumn,winter; } enum Person2{ student,worker; } public eclass Demo8 { public static void main(String[] args) { Season season = Season.summer; switch(season){ case spring: System.out.println("春天"); break; case summer: System.out.println("夏天"); break; case autumn: System.out.println("秋天"); break; case winter: System.out.println("冬天"); break; } } }