WHCSRL 技术网

枚举(Enum)

一、定义

        有限的、确定的、数据可以作为枚举类

        例如:

        天气:春、夏、秋、冬

        星期:星期一、星期二、..... 星期天

        性别:男、女、(可能有个未知)

        这一类的信息是不变的,有限的,所以可以直接用枚举

        所以:定义一组常量时,建议使用枚举

二、格式

        1.创建Enum类,必须先创建对象信息

        2.由于枚举是不变的,也就是final修饰的,但是在枚举类中不需要final,写了会报错

        3.每个对象用 (逗号)”,“ 隔开,(分号)”;“结束

        示例:

        在输入的时候输出的是枚举类中对象的名称,原因是enum的父类是Enum,并不是Object

  1. /**
  2. * 天气枚举类,春夏秋冬
  3. */
  4. public enum Season {
  5. SPRING,
  6. SUMMER,
  7. AUTUMN,
  8. WINTER;
  9. public static void main(String[] args) {
  10. Season autumn = Season.AUTUMN;
  11. System.out.println(autumn);
  12. }
  13. }

        结果:

         

三、给枚举加入属性

        1.定义属性,final修饰

        2.定义有参构造器

        3.重写toString方法

        示例:

  1. /**
  2. * 天气枚举类,春夏秋冬
  3. */
  4. public enum Season {
  5. //枚举对象
  6. SPRING("1","春天"),
  7. SUMMER("2","夏天"),
  8. AUTUMN("3","秋天"),
  9. WINTER("4","冬天");
  10. //参数
  11. private final String type;
  12. private final String desc;
  13. //有参构造器
  14. Season(String type, String desc) {
  15. this.type = type;
  16. this.desc = desc;
  17. }
  18. //重写toString
  19. @Override
  20. public String toString() {
  21. return "Season{" +
  22. "type='" + type + ''' +
  23. ", desc='" + desc + ''' +
  24. '}';
  25. }
  26. public static void main(String[] args) {
  27. //获取枚举信息
  28. Season autumn = Season.AUTUMN;
  29. // System.out.println(autumn);
  30. //获取枚举信息参数
  31. System.out.println(autumn);
  32. }
  33. }

        结果:

         

四、枚举实现其他类

        1.枚举实现类

        2.在每个枚举类对象中都重写方法

        示例:

        接口

  1. public interface Info {
  2. void show();
  3. }

        代码 

  1. /**
  2. * 天气枚举类,春夏秋冬
  3. */
  4. public enum Season implements Info{
  5. //枚举对象
  6. SPRING("1","春天"){
  7. @Override
  8. public void show() {
  9. System.out.println("春天");
  10. }
  11. },
  12. SUMMER("2","夏天"){
  13. @Override
  14. public void show() {
  15. System.out.println("夏天");
  16. }
  17. },
  18. AUTUMN("3","秋天"){
  19. @Override
  20. public void show() {
  21. System.out.println("秋天");
  22. }
  23. },
  24. WINTER("4","冬天"){
  25. @Override
  26. public void show() {
  27. System.out.println("冬天");
  28. }
  29. };
  30. //参数
  31. private final String type;
  32. private final String desc;
  33. //有参构造器
  34. Season(String type, String desc) {
  35. this.type = type;
  36. this.desc = desc;
  37. }
  38. //重写toString
  39. @Override
  40. public String toString() {
  41. return "Season{" +
  42. "type='" + type + ''' +
  43. ", desc='" + desc + ''' +
  44. '}';
  45. }
  46. public static void main(String[] args) {
  47. //获取枚举信息
  48. Season autumn = Season.AUTUMN;
  49. // System.out.println(autumn);
  50. //获取枚举信息参数
  51. // System.out.println(autumn);
  52. //调用实现的类方法
  53. autumn.show();
  54. }
  55. }

 结果

 五、疑惑解答

        为什么要用枚举?不用调用数据?

        原因:

        调用数据库需要查数据库,并且有时间的耗时,而且枚举都是常量并且确定的不修改的,属于没必要写在数据库中

推荐阅读