zoukankan      html  css  js  c++  java
  • java枚举通俗实例解析

    1         枚举

    1.1            枚举的作用

    我们经常要定义一些常量值,例如日期(MONDAY,TUESDAY……)或者错误码等。可以将常量组织起来,统一进行管理。常量比较只是值的比较,而枚举的比较需要传入枚举类型,代码更加规范,例如IsWeekend(MONDAY),不会出现IsWeekend(0)这样含义不明的代码。枚举实际上一个继承java.lang.Enum的类,由于java单继承的特性,枚举不再继承其他类,只能继承接口;枚举可以定义函数、属性。

    常量实例:

    public class DaysOfTheWeekConstants {

        public static final int MONDAY = 0;

        public static final int TUESDAY = 1;

        public static final int WEDNESDAY = 2;

        public static final int THURSDAY = 3;

        public static final int FRIDAY = 4;

        public static final int SATURDAY = 5;

        public static final int SUNDAY = 6;

    }

    枚举示例:

    public enum enDaysOfTheWeekConstants {

       MONDAY,

       TUESDAY,

       WEDNESDAY,

       THURSDAY ,

       FRIDAY ,

       SATURDAY ,

       SUNDAY ;

    }

    1.2            枚举的基本方法

    在enum中,提供了一些基本方法:

    values():返回enum实例的数组,而且该数组中的元素严格保持在enum中声明时的顺序。

    (1)name():返回实例名。

    (2)ordinal():返回实例声明时的次序,从0开始。

    (3)getDeclaringClass():返回实例所属的enum类型。

    (4)equals() :判断是否为同一个对象。

    可以使用 == 来比较enum实例。地址比较;

    此外,java.lang.Enum实现了Comparable和 Serializable 接口,所以也提供 compareTo() 方法。compareTo()是进行值比较,相等返回0,大于,返回1,小于返回-1.

    例:展示enum的基本方法

    public class EnumMethodDemo {

        enum Color {RED, GREEN, BLUE;}

        enum Size {BIG, MIDDLE, SMALL;}

        public static void main(String args[]) {

            System.out.println("=========== Print all Color ===========");

            for (Color c : Color.values()) {

                System.out.println(c + " ordinal: " + c.ordinal());

            }

    /*输出顺序值。从0开始;

    =========== Print all Color ===========

    RED ordinal: 0

    GREEN ordinal: 1

    BLUE ordinal: 2

    */

            Color green = Color.GREEN;//

            System.out.println("green name(): " + green.name());//输出:green name(): GREEN

            System.out.println("green getDeclaringClass(): " + green.getDeclaringClass());//输出: green getDeclaringClass(): class org.zp.javase.enumeration.EnumDemo$Color

            System.out.println("green hashCode(): " + green.hashCode());//输出:green hashCode(): 460141958

            System.out.println("green compareTo Color.GREEN: " + green.compareTo(Color.GREEN));// green compareTo Color.GREEN: 0

            System.out.println("green equals Color.GREEN: " + green.equals(Color.GREEN));// green equals Color.GREEN: true

            System.out.println("green equals Size.MIDDLE: " + green.equals(Size.MIDDLE));// 地址比较:green equals Size.MIDDLE: false

            System.out.println("green equals 1: " + green.equals(1)); green equals 1: false

        }

    }

    ==号和Equal是地址比较,CompareTo是值比较

    1.3            枚举类介绍

    简单的枚举类创建

    public enum DaysOfTheWeek {

        MONDAY,

        TUESDAY,

        WEDNESDAY,

        THURSDAY,

        FRIDAY,

        SATURDAY,

        SUNDAY

    }

    enum是一种受限制的类,这个类继承自 java.lang.Enum。枚举类可以有自己的构造函数、方法、属性。

    public enum DaysOfTheWeekFields {

        MONDAY(false),

        TUESDAY(false),

        WEDNESDAY(false),

        THURSDAY(false),

        FRIDAY(false),

        SATURDAY(true),

        SUNDAY(true);//枚举的申明,最后一定要用分号;

       

    private final boolean isWeekend;//enum的属性

        private DaysOfTheWeekFields( final boolean isWeekend ) {//构造函数

            this.isWeekend = isWeekend;

        }

                  //方法

        public boolean isWeekend() {

            return isWeekend;

        }

    }

    使用枚举代码实例

    DaysOfTheWeekFields enumday = DaysOfTheWeekFields. MONDAY(false);

    If(enumday.equals(DaysOfTheWeekFields. MONDAY))

    1.4            枚举与接口

    实现接口public interface weekend{boolean isWeekend();}

    枚举类的定义如下

    public enum DaysOfTheWeekFields implements weekend {

        MONDAY(false),

        TUESDAY(false),

        WEDNESDAY(false),

        THURSDAY(false),

        FRIDAY(false),

        SATURDAY(true),

        SUNDAY(true);//枚举的申明,最后一定要用分号;

       

    private final boolean isWeekend;//属性

        private DaysOfTheWeekFields( final boolean isWeekend ) {//构造函数

            this.isWeekend = isWeekend;

        }

                  //实现接口的方法

        public boolean isWeekend() {

            return isWeekend;

        }

    }

    1.5            组织枚举

    当我们需要建立一个枚举来表示所有的食物,但是食物又细分小类:水果、主食、蔬菜;我们不希望将这些所有的食物混乱的放在一个枚举中,而希望水果、主食、蔬菜都各自分类。然后再将这些小的分类组织在一起,通过同一个接口对外提供使用。这就是组织枚举。组织枚举是通过一个接口interface将各个子类组织起来,具体实例如下:

    Public interface Food{//定义一个接口

    //创建水果枚举

    enum Fruit implements Food{

    APPLE,ORENGE,BANANA;}

    }

    //创建主食枚举

    Enum MainFood implements Food{

    RICE,NOODEL;

    }

    //创建蔬菜枚举

    Enum Vegetables implements Food{

    TAMATA,CUCUMBER;

    }

    //使用实例

    public class InterfaceOrganizeEnum {

        public static void main(String[] args) {

            Food food = Fruit. APPLE;

            food = MainFood. RICE;

        }

    }

    上面的实例先创建了一个接口,然后在接口中定义了三个小类枚举,都属于Food这个大类。这样就可以定义接口引用food,来指向任何小类的枚举值。

    1.6            策略枚举

    顾名思义,就是对不同的枚举采用不同的处理策略;原有常用的方法是通过switch语句判断不同的枚举类型,进行不同的处理操作。例如加减乘除基本运算,先要用switch语句来判断运算符,然后在进行计算值。策略枚举这是将加减乘除定义为四个枚举类型,枚举定义抽象方法calculate,各个枚举值实现不同的运算方法。

    // 策略枚举 

    enum Calculator { 

         

        // 加法策略的实现 

        Add(){ 

            public int calculate(int a, int b) { 

                return (a + b); 

            } 

        },  // 这里用逗号隔开各个枚举变量 

        // 减法策略的实现 

        Sub(){ 

            public int calculate(int a, int b) { 

                return (a - b); 

            } 

        }; // 这里用分号结束枚举变量的定义 

         

        // 定义抽象算法方法,让每个枚举变量来具体实现 

        public abstract int calculate(int a, int b); 

     //策略枚举使用实例

    public class Client { 

        public static void main(String[] args) { 

            // 加法 

            System.out.println(Calculator.Add.calculate(20, 13)); 

             

            // 减法 

            System.out.println(Calculator.Sub.calculate(20, 13)); 

        } 

    }

    1.7            EnumSet,EnumMap 的应用

    EnumSet,EnumMap是两个用来保存枚举的集合。通过枚举类来获得枚举值。

    public class Test {

        public static void main(String[] args) {

            // EnumSet的使用

            EnumSet<EnumTest> weekSet = EnumSet.allOf(EnumTest.class);

            for (EnumTest day : weekSet) {

                System.out.println(day);

            }

            // EnumMap的使用

            EnumMap<EnumTest, String> weekMap = new EnumMap(EnumTest.class);

    //插入枚举值

            weekMap.put(EnumTest.MON, "星期一");

            weekMap.put(EnumTest.TUE, "星期二");

            // ... ...

            for (Iterator<Entry<EnumTest, String>> iter = weekMap.entrySet().iterator(); iter.hasNext();) {

                Entry<EnumTest, String> entry = iter.next();

                System.out.println(entry.getKey().name() + ":" + entry.getValue());

            }

        }

    }

    自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取:

    https://www.cnblogs.com/bclshuai/p/11380657.html

    百度云盘下载地址:

    链接:https://pan.baidu.com/s/1swkQzCIKI3g3ObcebgpIDg

    提取码:mc8l

    微信公众号获取最新的软件和视频介绍

    QStockView

  • 相关阅读:
    穷举和迭代
    for循环练习题
    case when then else end 用法
    如何将数据库账号(用户)解锁
    比赛安排
    How to spend you day ?
    异常-问题型
    重载和重写的区别
    new关键字的理解-问题型
    源辰项目-1
  • 原文地址:https://www.cnblogs.com/bclshuai/p/10636443.html
Copyright © 2011-2022 走看看