日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

浅谈java枚举类

發(fā)布時間:2025/3/21 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈java枚举类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、什么情況下使用枚舉類?

  有的時候一個類的對象是有限且固定的,這種情況下我們使用枚舉類就比較方便?

二、為什么不用靜態(tài)常量來替代枚舉類呢?

public static final int SEASON_SPRING = 1;public static final int SEASON_SUMMER = 2;public static final int SEASON_FALL = 3;public static final int SEASON_WINTER = 4;

  枚舉類更加直觀,類型安全。使用常量會有以下幾個缺陷:

  1. 類型不安全。若一個方法中要求傳入季節(jié)這個參數(shù),用常量的話,形參就是int類型,開發(fā)者傳入任意類型的int類型值就行,但是如果是枚舉類型的話,就只能傳入枚舉類中包含的對象。

  2. 沒有命名空間。開發(fā)者要在命名的時候以SEASON_開頭,這樣另外一個開發(fā)者再看這段代碼的時候,才知道這四個常量分別代表季節(jié)。

三、枚舉類入門

  先看一個簡單的枚舉類。

package enumcase;public enum SeasonEnum {SPRING,SUMMER,FALL,WINTER; }
  • enum和class、interface的地位一樣
  • 使用enum定義的枚舉類默認(rèn)繼承了java.lang.Enum,而不是繼承Object類。枚舉類可以實現(xiàn)一個或多個接口。
  • 枚舉類的所有實例都必須放在第一行展示,不需使用new 關(guān)鍵字,不需顯式調(diào)用構(gòu)造器。自動添加public static final修飾。
  • 使用enum定義、非抽象的枚舉類默認(rèn)使用final修飾,不可以被繼承。
  • 枚舉類的構(gòu)造器只能是私有的。
  • 四、枚舉類介紹

      枚舉類內(nèi)也可以定義屬性和方法,可是是靜態(tài)的和非靜態(tài)的。

    package enumcase;public enum SeasonEnum {SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天");private final String name;private SeasonEnum(String name){this.name = name;}public String getName() {return name;} }

    ? ? 實際上在第一行寫枚舉類實例的時候,默認(rèn)是調(diào)用了構(gòu)造器的,所以此處需要傳入?yún)?shù),因為沒有顯式申明無參構(gòu)造器,只能調(diào)用有參數(shù)的構(gòu)造器。

      構(gòu)造器需定義成私有的,這樣就不能在別處申明此類的對象了。枚舉類通常應(yīng)該設(shè)計成不可變類,它的Field不應(yīng)該被改變,這樣會更安全,而且代碼更加簡潔。所以我們將Field用private final修飾。

    五、枚舉類實現(xiàn)接口

      枚舉類可以實現(xiàn)一個或多個接口。與普通類一樣,實現(xiàn)接口的時候需要實現(xiàn)接口中定義的所有方法,若沒有完全實現(xiàn),那這個枚舉類就是抽象的,只是不需顯式加上abstract修飾,系統(tǒng)化會默認(rèn)加上。

      

    package enumcase;public enum Operation {PLUS{@Overridepublic double eval(double x, double y) {return x + y;}},MINUS{@Overridepublic double eval(double x, double y) {return x - y;}},TIMES{@Overridepublic double eval(double x, double y) {return x * y;}},DIVIDE{@Overridepublic double eval(double x, double y) {return x / y;}};/*** 抽象方法,由不同的枚舉值提供不同的實現(xiàn)。* @param x* @param y* @return*/public abstract double eval(double x, double y);public static void main(String[] args) {System.out.println(Operation.PLUS.eval(10, 2));System.out.println(Operation.MINUS.eval(10, 2));System.out.println(Operation.TIMES.eval(10, 2));System.out.println(Operation.DIVIDE.eval(10, 2));} }

      Operatio類實際上是抽象的,不可以創(chuàng)建枚舉值,所以此處在申明枚舉值的時候,都實現(xiàn)了抽象方法,這其實是匿名內(nèi)部類的實現(xiàn),花括號部分是一個類體。我們可以看下編譯以后的文件。

      

      共生成了五個class文件,這樣就證明了PLUS,MINUS,TIMES,DIVIDE是Operation的匿名內(nèi)部類的實例。

    六、switch語句里的表達(dá)式可以是枚舉值

      Java5新增了enum關(guān)鍵字,同時擴展了switch。

    package enumcase;public class SeasonTest {public void judge(SeasonEnum s){switch(s){case SPRING:System.out.println("春天適合踏青。");break;case SUMMER:System.out.println("夏天要去游泳啦。");break;case FALL:System.out.println("秋天一定要去旅游哦。");break;case WINTER:System.out.println("冬天要是下雪就好啦。");break;}}public static void main(String[] args) {SeasonEnum s = SeasonEnum.SPRING;SeasonTest test = new SeasonTest();test.judge(s);} }

      case表達(dá)式中直接寫入枚舉值,不需加入枚舉類作為限定。


    from:?https://www.cnblogs.com/sister/p/4700702.html

    總結(jié)

    以上是生活随笔為你收集整理的浅谈java枚举类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。