日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Java枚舉的使用

 沙門空海 2020-03-15

枚舉類型可以取代以往常量的定義方式,即將常量封裝在類或接口中。此外,枚舉類型還提供了安全檢查功能。枚舉類型本質(zhì)上還是以類的形式存在。

1、使用枚舉類型設(shè)置常量

以往設(shè)置常量,通常將常量放置在接口中,這樣在程序中就可以直接使用了,并且該常量不能被修改,因為在接口中定義的常量時,該常量的修飾符為final與static。

  1. public interface Constants
  2. {
  3. public static final int RED = 1;
  4. public static final int BLUE = 2;
  5. public static final int GREEN = 3;
  6. }

使用枚舉定義常量的語法如下:

  1. public enum ColorEnum
  2. {
  3. RED,
  4. BLUE,
  5. GREEN
  6. }

命名規(guī)范:

final常量:使用大寫字母命名,并且中間使用下劃線進行連接。

enum枚舉:使用大寫字母命名,并且中間使用下劃線進行連接。

示例:枚舉類型的使用。

  1. public static void doit(ColorEnum c)
  2. {
  3. switch (c)
  4. {
  5. case RED:
  6. System.out.println("This is RED");
  7. break;
  8. case BLUE:
  9. System.out.println("This is BLUE");
  10. break;
  11. case GREEN:
  12. System.out.println("This is GREEN");
  13. break;
  14. default:
  15. break;
  16. }
  17. }
  18. public static void main(String[] args)
  19. {
  20. doit(ColorEnum.RED);
  21. }

 

2、深入了解枚舉類型

枚舉類型較傳統(tǒng)定義常量的方式,除了具有參數(shù)類型檢測的優(yōu)勢之外,還具有其他方面的優(yōu)勢。

2.1 操作枚舉類型成員的方法

用戶可以將一個枚舉類型看作是一個類,它繼承于java.lang.Enum類,當(dāng)定義一個枚舉類型時,每一個枚舉類型成員都可以看作是枚舉類型的一個實例,這些枚舉類型成員默認(rèn)都被final、public、static所修飾,所以當(dāng)使用枚舉類型成員時直接使用枚舉類型名稱調(diào)用枚舉類型成員即可。

由于枚舉類型對象繼承與java.lang.Enum類,所以該類中一些操作枚舉類型的方法都可以應(yīng)用到枚舉型中。

枚舉類型的常用方法:

方法名稱 具體含義 使用方法
values() 該方法可以將枚舉類型成員以數(shù)組的形式返回 枚舉類型名稱.values()
valueOf() 該方法可以實現(xiàn)將普通字符串轉(zhuǎn)換為枚舉實例 枚舉類型名稱.valueOf("ABC")
compareTo() 該方法用于比較兩個枚舉對象在定義時的順序 枚舉對象.compareTo()
ordinal() 該方法用于得到枚舉成員的位置索引 枚舉對象.ordinal()

(1)values()方法

該方法可以將枚舉類型成員以數(shù)組的形式返回,也可以通過該方法獲取枚舉類型的成員。

示例:使用枚舉類型中的values()方法獲取枚舉類型中的成員變量。

  1. /**
  2. * 使用枚舉類型中的values()方法獲取枚舉類型中的成員變量
  3. *
  4. * @author pan_junbiao
  5. *
  6. */
  7. public class ShowEnum
  8. {
  9. enum ColorEnum
  10. {
  11. RED, BLUE, GREEN
  12. }
  13. // 循環(huán)由values()方法返回的數(shù)組
  14. public static void main(String[] args)
  15. {
  16. System.out.println("方式一:");
  17. for (int i = 0; i < ColorEnum.values().length; i++)
  18. {
  19. // 將枚舉成員變量打印
  20. System.out.println("枚舉類型成員變量:" + ColorEnum.values()[i]);
  21. }
  22. System.out.println("方式二:");
  23. for (ColorEnum c : ColorEnum.values())
  24. {
  25. // 將枚舉成員變量打印
  26. System.out.println("枚舉類型成員變量:" + c);
  27. }
  28. }
  29. }

執(zhí)行結(jié)果:

(2)valueOf()與compareTo()方法

枚舉類型中靜態(tài)方法valueOf()可以實現(xiàn)將普通字符串轉(zhuǎn)換為枚舉實例,而compareTo()方法用于比較兩個枚舉對象在定義時的順序。

示例:枚舉中valueOf()與compareTo()方法的使用。

  1. /**
  2. * 枚舉中valueOf()與compareTo()方法的使用
  3. *
  4. * @author pan_junbiao
  5. *
  6. */
  7. public class EnumMethodTest
  8. {
  9. enum ColorEnum
  10. {
  11. RED, BLUE, GREEN
  12. }
  13. // 定義比較枚舉類型方法,參數(shù)類型為枚舉類型
  14. public static void compare(ColorEnum c)
  15. {
  16. // 根據(jù)values()方法返回的數(shù)組做循環(huán)操作
  17. for (int i = 0; i < ColorEnum.values().length; i++)
  18. {
  19. // 將比較結(jié)果返回
  20. System.out.println(c + "與" + ColorEnum.values()[i] + "的比較結(jié)果為:" + c.compareTo(ColorEnum.values()[i]));
  21. }
  22. }
  23. public static void main(String[] args)
  24. {
  25. // 使用valueOf()將字符串轉(zhuǎn)換為枚舉實例
  26. ColorEnum c = ColorEnum.valueOf("BLUE");
  27. compare(c);
  28. }
  29. }

執(zhí)行結(jié)果:

說明:調(diào)用compareTo()方法返回的結(jié)果,正值代表方法中的參數(shù)在調(diào)用該方法的枚舉對象位置之前;0代表兩個相互比較的枚舉成員的位置相同;負(fù)值代表方法中參數(shù)在調(diào)用該方法的枚舉對象位置之后。

(3)ordinal()方法

該方法用于得到枚舉成員的位置索引。

示例:枚舉中ordinal()方法的使用。

  1. /**
  2. * 枚舉中ordinal()方法的使用
  3. *
  4. * @author pan_junbiao
  5. *
  6. */
  7. public class EnumOrdinalTest
  8. {
  9. public enum ColorEnum
  10. {
  11. RED, BLUE, GREEN
  12. }
  13. public static void main(String[] args)
  14. {
  15. for (int i = 0; i < ColorEnum.values().length; i++)
  16. {
  17. // 在循環(huán)中獲取枚舉類型成員的索引位置
  18. System.out.println(ColorEnum.values()[i] + "在枚舉類型中位置索引值" + ColorEnum.values()[i].ordinal());
  19. }
  20. }
  21. }

執(zhí)行結(jié)果:

2.2 枚舉類型中的構(gòu)造方法

在枚舉類型中,可以添加構(gòu)造方法,但是規(guī)定這個構(gòu)造方法必須為private修飾符修飾。

示例:在枚舉類型中,可以添加構(gòu)造方法。

  1. /**
  2. * 在枚舉類型中添加構(gòu)造方法
  3. *
  4. * @author pan_junbiao
  5. *
  6. */
  7. public class EnumIndexTest
  8. {
  9. enum ColorEnum
  10. {
  11. RED(1, "我是紅色"), BLUE(2, "我是藍色"), GREEN(3, "我是綠色");
  12. private final int value;
  13. private final String description;
  14. private ColorEnum(int value, String description)
  15. {
  16. this.value = value;
  17. this.description = description;
  18. }
  19. public int getValue()
  20. {
  21. return this.value;
  22. }
  23. public String getDescription()
  24. {
  25. return this.description;
  26. }
  27. public static ColorEnum valueOf(int value)
  28. {
  29. switch (value)
  30. {
  31. case 1:
  32. return ColorEnum.RED;
  33. case 2:
  34. return ColorEnum.BLUE;
  35. case 3:
  36. return ColorEnum.GREEN;
  37. default:
  38. return null;
  39. }
  40. }
  41. }
  42. public static void main(String[] args)
  43. {
  44. for (ColorEnum c : ColorEnum.values())
  45. {
  46. System.out.println("枚舉成員:" + c + " 值:" + c.getValue() + " 描述:" + c.getDescription());
  47. }
  48. System.out.println("值轉(zhuǎn)換成枚舉:" + ColorEnum.valueOf(2));
  49. System.out.println("字符串轉(zhuǎn)換成枚舉:" + ColorEnum.valueOf("GREEN"));
  50. }
  51. }

執(zhí)行結(jié)果:

2.3 枚舉中實現(xiàn)接口

除了可以使用上述示例的方法定義getDescription()方法獲取枚舉類型成員變量是的描述之外,還可以將這個getDescription()方法放置在接口中,使枚舉類型實現(xiàn)接口,然后使每個枚舉類型實現(xiàn)接口中的方法。

示例:在項目中創(chuàng)建d接口和枚舉類型的AnyEnum類,在枚舉類型AnyEnum類中實現(xiàn)帶方法的接口,使每個枚舉類型成員實現(xiàn)該接口中的方法。

  1. interface d
  2. {
  3. public int getValue();
  4. public String getDescription();
  5. }
  6. /**
  7. * 枚舉中實現(xiàn)接口
  8. *
  9. * @author pan_junbiao
  10. *
  11. */
  12. public enum AnyEnum implements d
  13. {
  14. RED
  15. {
  16. public int getValue()
  17. {
  18. return 1;
  19. }
  20. public String getDescription()
  21. {
  22. return "我是紅色";
  23. }
  24. },
  25. BLUE
  26. {
  27. public int getValue()
  28. {
  29. return 2;
  30. }
  31. public String getDescription()
  32. {
  33. return "我是藍色";
  34. }
  35. },
  36. GREEN
  37. {
  38. public int getValue()
  39. {
  40. return 3;
  41. }
  42. public String getDescription()
  43. {
  44. return "我是綠色";
  45. }
  46. };
  47. public static void main(String[] args)
  48. {
  49. for (AnyEnum c : AnyEnum.values())
  50. {
  51. System.out.println("枚舉成員:" + c + " 值:" + c.getValue() + " 描述:" + c.getDescription());
  52. }
  53. }
  54. }

執(zhí)行結(jié)果:

 

3、使用枚舉類型的優(yōu)勢

枚舉類型聲明提供了一種用戶友好的變量定義方法,枚舉了某種數(shù)據(jù)類型所有可能出現(xiàn)的值。總結(jié)枚舉類型,它具有以下特點:

(1)類型安全。

(2)緊湊有效的數(shù)據(jù)定義。

(3)可以和程序其他部分完美交互。

(4)運行效率高。

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多