zoukankan      html  css  js  c++  java
  • Java 枚举

    什么是枚举

    1.在jdk5之前,是通过抽象类 私有化构造方法 并在类的内部提供公有 静态 常量的 当前类对象来实现枚举的

    2.而在jdk5中,java提供了新的关键字叫enum来实现枚举类型,大大简化了这个过程

    3.枚举是在类里面写有构造方法,这些构造方法是私有的,外部类不可调用,因此你不能用枚举类来构造新的对象,枚举类里面提供什么对象你就只能用什么对象。

    4.枚举类中的构造方法内定义的参数都是静态常量,也就是说不可以对里面的参数进行修改。简而言之,就是我给你啥你就只能用啥。

    5.例如,我们为果汁店设计一个程序,它将限制果汁为小杯、中杯、大杯。这就意味着它不允许顾客点除了这三种尺寸外的果汁。

    实例一

      枚举的原理

    public class Demo1 {
        public static void main(String[] args) {
            
        }
    }
    /**
     * 枚举
     */
    enum WeekEnum01{
        Mon,Tue,Wed,Thu,Fri,Sat,Sun
    }
    /**
     * 枚举的原理
     */
    class Week01{
        private Week01() {
        }
        public static final Week01 Mon = new Week01();
        public static final Week01 Tue = new Week01();
        public static final Week01 Wed = new Week01();
        public static final Week01 Thu = new Week01();
        public static final Week01 Fri = new Week01();
        public static final Week01 Sat = new Week01();
        public static final Week01 Sun = new Week01();
    }

    实例二

    package Enum;
    
    public class Demo2 {
        public static void main(String[] args) {
            System.out.println(Week2.Fri.getDay());
            System.out.println(Week2.Fri.isRestDay());
            System.out.println(WeekEnum2.Fri.getDay());
            System.out.println(WeekEnum2.Fri.isRestDay());
        }
    }
    
    //在JDK5之后,有了enmu关键字 ,便于实现枚举
    //--包含成员属性
    //--包含私有构造方法
    //--包含普通方法
    //--包含抽象方法
    enum WeekEnum2{
        Mon(1){
            @Override
            public boolean isRestDay() {
                return false;
            }
        },Tue(2){
            @Override
            public boolean isRestDay() {
                return false;
            }
        },Wed(3){
            @Override
            public boolean isRestDay() {
                return false;
            }
        },Thu(4){
            @Override
            public boolean isRestDay() {
                return false;
            }
        },Fri(5){
            @Override
            public boolean isRestDay() {
                return false;
            }
        },Sat(6){
            @Override
            public boolean isRestDay() {
                return true;
            }
        },Sun(7){
            @Override
            public boolean isRestDay() {
                return true;
            }
        };
        private int day = 0;
        private WeekEnum2(int day){
            this.day = day;
        }
        public int getDay(){
            return day;
        }
        public abstract boolean isRestDay();
    }
    //在JDK5之前,手动实现枚举效果
    //--包含成员属性
    //--包含私有构造方法
    //--包含普通方法
    //--包含抽象方法
    abstract class Week2{
        public static final Week2 Mon = new Week2(1){
            @Override
            public boolean isRestDay() {
                return false;
            }
        };
        public static final Week2 Tue = new Week2(2){
            @Override
            public boolean isRestDay() {
                return false;
            }
        };
        public static final Week2 Wed = new Week2(3){
            @Override
            public boolean isRestDay() {
                return false;
            }
        };
        public static final Week2 Thu = new Week2(4){
            @Override
            public boolean isRestDay() {
                return false;
            }
        };
        public static final Week2 Fri = new Week2(5){
            @Override
            public boolean isRestDay() {
                return false;
            }
        };
        public static final Week2 Sat = new Week2(6){
            @Override
            public boolean isRestDay() {
                return true;
            }
        };
        public static final Week2 Sun = new Week2(7){
            @Override
            public boolean isRestDay() {
                return true;
            }
        };
        
        private int day = 0;
        private Week2(int day) {
            this.day = day;
        }
        public int getDay(){
            return this.day;
        }
        public abstract boolean isRestDay();
    
    }

    运行结果:

    5
    false
    5
    false

    程序解读:

        Mon(1){
                @Override
                public boolean isRestDay() {
                        return false;
                }

    Mon 相当于在枚举类的内部实例化了一个对象,它的底层相当于

    public static final  WeekEnum2  Mon  =  new  WeekEnum2(1){  

      @Override
            public boolean isRestDay() {
                  return false;
            }

    };

    因为构造方法只有一个,且是有参构造,所以在实例化对象的时候需要传入一个参数。

    例如:String str = new String("a");

  • 相关阅读:
    python学习随笔--string[:]
    年少时读不懂 天龙八部,如今读懂已过少年
    web安全测试随笔
    纪录jmeter loop controller 使用中的一个坑
    移动设备覆盖统计数据源
    jmeter and postman
    web测试----http状态码
    转自莫某的java学习计划
    jquery实现页面加载时删除特定class 的div内前三个字符
    js学习
  • 原文地址:https://www.cnblogs.com/chuijingjing/p/9561219.html
Copyright © 2011-2022 走看看