zoukankan      html  css  js  c++  java
  • 92.Java枚举类enum

    枚举类

    一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决。

    例如: 交通灯(红、黄、绿)    性别(男、女)   星期(星期一、二、三…..)

         分数等级(A、B、C、D、E)

    JDK 5新增的 enum 关键字用于定义一个枚举类。

    枚举的实现

    使用enum定义枚举类

    在枚举类中定义枚举值(大写)

    enum Gender {
        MALE, FEMALE;
    }

    使用javap命令

    发现其中每一个枚举值都是枚举类的具体实例对象.只不过是静态常量.

    枚举类具有如下特性:

    枚举类也是一种特殊形式的Java类。

    枚举类中声明的每一个枚举值代表枚举类的一个实例对象。

    与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数.

    public class Demo1 {
        public static void main(String[] args) {
            Gender male = Gender.MALE;
            System.out.println(male.getInfo());
        }
    }
    
    enum Gender {
        MALE("男"), FEMALE;
    
        // 成员变量
        private String info;
    
        // 构造函数
        private Gender() {
    
        }
    
        private Gender(String info) {
            this.info = info;
        }
    
        // 成员方法
        public String getInfo() {
            return info;
        }
    
    }

    枚举类可以声明抽象方法,但是要有具体的枚举值去实现.

    public class Demo1 {
        public static void main(String[] args) {
            Gender male = Gender.MALE;
            System.out.println(male.getInfo());
            male.speak();
        }
    }
    
    enum Gender {
        MALE("男") {
            @Override
            public void speak() {
                System.out.println("是男人");
            }
        },
        FEMALE {
            @Override
            public void speak() {
                System.out.println("是女人");
            }
        };
    
        // 成员变量
        private String info;
    
        // 构造函数
        private Gender() {
    
        }
    
        private Gender(String info) {
            this.info = info;
        }
    
        // 成员方法
        public String getInfo() {
            return info;
        }
    
        public abstract void speak();
    
    }

    枚举类也可以实现接口(序列化)、或继承抽象类。

    JDK5中扩展了swith语句,它除了可以接收int, byte, char, short外,还可以接收一个枚举类型(enum)。

    public class Demo2 {
        public static void main(String[] args) {
            WeekDay mon = WeekDay.MON;
            switch (mon) {
            case MON:
                System.out.println("星期一要上班...");
                break;
            case TUE:
                System.out.println("星期二,继续上班...");
                break;
            }
        }
    }
    
    enum WeekDay {
        MON, TUE, WED, THU, FRI, SAT, SUN;
    }

    若枚举类只有一个枚举值,则可以当作单态设计模式使用。

    练习:

    请编写一个关于星期几的枚举WeekDay,要求:枚举值:Mon,Tue,Wed,Thu,Fri,Sat,Sun 该枚举要有一个方法,调用该方法返回中文格式的星期。

    enum WeekDay {
        MON {
    
            @Override
            public String getInfo() {
    
                return "星期一";
            }
    
        },
        TUE {
            @Override
            public String getInfo() {
    
                return "星期二";
            }
        },
        WED {
            @Override
            public String getInfo() {
    
                return "星期三";
            }
        },
        THU {
            @Override
            public String getInfo() {
    
                return "星期四";
            }
        },
        FRI {
            @Override
            public String getInfo() {
    
                return "星期五";
            }
        },
        SAT {
            @Override
            public String getInfo() {
    
                return "星期六";
            }
        },
        SUN {
            @Override
            public String getInfo() {
    
                return "星期天";
            }
        };
    
        public abstract String getInfo();
    }
    author@nohert
  • 相关阅读:
    iOS CALayer 学习(2)
    iOS CALayer 学习(1)
    iOS 绘画学习(5)
    iOS 绘画学习(4)
    果冻视图制作教程
    15个名不见经传的Unix命令
    WEB服务器2--IIS架构(转)
    WEB服务器1--开篇
    HTTP协议5之代理--转
    HTTP协议4之缓存--转
  • 原文地址:https://www.cnblogs.com/gzgBlog/p/13624514.html
Copyright © 2011-2022 走看看