zoukankan      html  css  js  c++  java
  • javaweb学习总结三(枚举)

    一:枚举的概念

    定义特定的数据,尤其像一些状态位。

    二:定义枚举类

    1:定义枚举,其中Grade枚举可以看做类,A、B、C、D、E可以看做对象,因为它定义了有参数的构造方法,所以

    对象后面必须带参数。

     1 // 定义枚举Grade
     2 enum Grade {
     3     A("90-100"), B("80-90"), C("70-80"), D("60-70"), E("小于60");
     4     private String value; //成员变量
     5 
     6     private Grade(String value) {  //构造方法
     7         this.value = value;
     8     }
     9 
    10     public String getValue() {  
    11         return this.value;
    12     }
    13 }

    2:调用枚举

    1     @Test
    2     public void testEnum() {
    3         print(Grade.A);
    4     }
    5 
    6     public void print(Grade g) {    //传参为枚举
    7         System.out.println(g.getValue());
    8     }

    三:带抽象方法的枚举类

    1:定义枚举

     1 // 定义枚举Grade
     2 enum Grade {
     3     A("90-100") {
     4         @Override
     5         public String localeValue() {
     6             return "优秀";
     7         }
     8     },
     9     B("80-90") {
    10         @Override
    11         public String localeValue() {
    12             return "良好";
    13         }
    14     },
    15     C("70-80") {
    16         @Override
    17         public String localeValue() {
    18             return "中等";
    19         }
    20     },
    21     D("60-70") {
    22         @Override
    23         public String localeValue() {
    24             return "及格";
    25         }
    26     },
    27     E("小于60") {
    28         @Override
    29         public String localeValue() {
    30             return "不及格";
    31         }
    32     };
    33     private String value; // 成员变量
    34 
    35     private Grade(String value) { // 构造方法
    36         this.value = value;
    37     }
    38 
    39     public String getValue() {
    40         return this.value;
    41     }
    42 
    43     public abstract String localeValue(); // 定义抽象方法
    44 }

    2:调用

    1 @Test
    2     public void testEnum() {
    3         print(Grade.A);
    4     }
    5 
    6     public void print(Grade g) { // 传参为枚举
    7         System.out.println(g.getValue());
    8         System.out.println(g.localeValue());
    9     }

    四:枚举中常用的方法

    1:枚举类的构造函数必须是私有的,因为枚举是向程序传入特定的数据,如果是构造是public,那么

    程序就会new很多对象,违反枚举的意义。

    2:枚举可以作为单例设计模式,如下:

     1 enum Year {
     2     A; // 只有一个对象,构造函数私有,不能实例化
     3 }
     4 
     5 public class Year {
     6     private final Year y = new Year(); // 定义一个对象
     7 
     8     private Year() { // 私有化构造方法
     9 
    10     }
    11 
    12     public static Year getInstance() {
    13         return y;
    14     }
    15 }

    3:常用api

     1 @Test
     2     public void testEnumApi() {
     3         System.out.println(Grade.A.name()); // 输出名称
     4         System.out.println(Grade.A.ordinal());// 输出序号
     5         String str = "A"; // 将字符串转换为枚举
     6         Grade g = Grade.A.valueOf(str);
     7         System.out.println(g);
     8         // 获取所有的枚举对象
     9         Grade[] grades = Grade.values();
    10         for (Grade grade : grades) {
    11             System.out.println(grade);
    12         }
    13 
    14     }

    将字符串转换为枚举使用场景:

    客户端表单提交时,提交的数据(例如:性别)是字符串,在服务器端获取数据时,可以转换为枚举,如果能够

    转换,则验证通过;如果不能,则抛出异常,告知提交失败!

  • 相关阅读:
    《程序员成长的烦恼》
    我们一起读《暗时间》
    CSS选择器分类总结
    CSharp如何自定义鼠标样式
    Android开发消除横向排列的多个Button之间的空隙
    JS代码指导原则
    Android蓝牙联机Demo解析
    排序算法之堆排序(Heapsort)解析
    排序算法之归并排序(Mergesort)解析
    经典串匹配算法(KMP)解析
  • 原文地址:https://www.cnblogs.com/warrior4236/p/5705658.html
Copyright © 2011-2022 走看看