Java学习笔记(44)——Java枚举

一、枚举在Switch中的应用

1public enum MyColor{ 2   //每个枚举值用逗号隔开, 3   RED, 4   BLUE, 5   GREEN;//最后的分号可要或不要 6} 7 8public class Test1{ 9    public static void main(String[] args){ 10        MyColor myColor = MyColor.RED; 11        switch(myColor){ 12            case BLUE://这里就可以直接使用枚举值 13                System.out.println("蓝色"); 14                break; 15            case GREEN: 16                System.out.println("绿色"); 17                break; 18            case RED: 19                System.out.println("红色"); 20                break; 21            default: 22                System.out.println("什么色?"); 23                break;     24        } 25    } 26}

二、枚举的构造函数

1enum MyColor{ 2  RED("Hot", 4), BLUE("SAD",8); 3   4  private String mood; 5  public String getMood{ 6    return mood; 7  } 8  private int index; 9  public int getIndex(){ 10    return index; 11  } 12  private MyColor(String mood, int index){ 13    this.mood = mood; 14    this.index = index; 15  } 16} 17System.out.println(MyColor.RED.getMood());

枚举成员均要实现构造函数

三、枚举的抽象方法

1/** 2    * 订单状态 3    *  4    * 实现带有抽象方法的枚举 5    *  6    * @author wang 7    * 8    */ 9    public enum OrderState { 10        /** 已取消 */ 11        CANCEL {public String getName(){return "已取消";}}, 12        /** 待审核 */ 13        WAITCONFIRM {public String getName(){return "待审核";}}, 14        /** 等待付款 */ 15        WAITPAYMENT {public String getName(){return "等待付款";}}, 16        /** 正在配货 */ 17        ADMEASUREPRODUCT {public String getName(){return "正在配货";}}, 18        /** 等待发货 */ 19        WAITDELIVER {public String getName(){return "等待发货";}}, 20        /** 已发货 */ 21        DELIVERED {public String getName(){return "已发货";}}, 22        /** 已收货 */ 23        RECEIVED {public String getName(){return "已收货";}}; 24         25        public abstract String getName(); 26    }

枚举成员均要实现抽象方法

四、枚举实现接口

1package yuki.core.enumeration.interfaces; 2 3import java.util.Arrays; 4import java.util.List; 5 6public class PlanetTest { 7     8    private interface Move{ 9        void move(); 10    }; 11     12    private enum Planet implements Move{ 13        SOLAR,  14        EARTH{ 15            @Override 16            public void move() { 17                System.out.println("rounding...center:" + SOLAR); 18            } 19        },  20        MOON{ 21            @Override 22            public void move() { 23                System.out.println("rounding...center:" + EARTH); 24            } 25        }; 26         27        @Override 28        public void move() { 29            System.out.println("rounding..."); 30        } 31    } 32 33    public static void main(String[] args) { 34         35        List<Planet> planets = Arrays.asList(Planet.values()); 36        for(Planet planet : planets){ 37            System.out.print(planet + " : "); 38            planet.move(); 39        } 40    } 41 42} 43 44SOLAR : rounding... 45EARTH : rounding...center:SOLAR 46MOON : rounding...center:EARTH

枚举成员均要实现接口方法,可单独实现,亦可统一实现~

五、枚举常用方法

int **compareTo**(E o) 
          比较此枚举与指定对象的顺序。

Class<E> **getDeclaringClass**() 
          返回与此枚举常量的枚举类型相对应的 Class 对象。

String **name**() 
          返回此枚举常量的名称,在其枚举声明中对其进行声明。

int **ordinal**() 
          返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

String **toString**()

          返回枚举常量的名称,它包含在声明中。

static `<T extends Enum<T>> T` **valueOf**(Class<T> enumType, String name) 
          返回带指定名称的指定枚举类型的枚举常量。

六、EnumSet,EnumMap 的应用

1public class Test { 2    public static void main(String[] args) { 3        // EnumSet的使用 4        EnumSet<EnumTest> weekSet = EnumSet.allOf(EnumTest.class); 5        for (EnumTest day : weekSet) { 6            System.out.println(day); 7        } 8  9        // EnumMap的使用 10        EnumMap<EnumTest, String> weekMap = new EnumMap(EnumTest.class); 11        weekMap.put(EnumTest.MON, "星期一"); 12        weekMap.put(EnumTest.TUE, "星期二"); 13        // ... ... 14        for (Iterator<Entry<EnumTest, String>> iter = weekMap.entrySet().iterator(); iter.hasNext();) { 15            Entry<EnumTest, String> entry = iter.next(); 16            System.out.println(entry.getKey().name() + ":" + entry.getValue()); 17        } 18    } 19}

七、覆盖枚举的方法

1public enum Color {   2    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);   3    // 成员变量   4    private String name;   5    private int index;   6    // 构造方法   7    private Color(String name, int index) {   8        this.name = name;   9        this.index = index;   10    }   11    //覆盖方法   12    @Override   13    public String toString() {   14        return this.index+"_"+this.name;   15    }   16}

八、让相同枚举类型下的枚举值具有不同的行为--重写枚举值的方法

1public enum MyColor{ 2  RED, BLUE(){ 3     @Override 4     public boolean getFlag(){ 5       return false; 6     } 7  }; 8  public boolean getFlag(){ 9    return true; 10  } 11} 12// 调用 13System.out.println(MyColor.RED.getFlag()); // 显示true 14System.out.println(MyColor.BLUE.getFlag()); // 显示false
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )