zoukankan      html  css  js  c++  java
  • 60. 枚举

    jdk1.5新特性之------枚举

    问题:在我们编写程序的时候,有很多数据是在固定范围的,比如性别,只有男和女,那么我们怎么做才能防止别人不传入其他数据呢?

    解决:我们可以自定义一个类,私有化构造函数,并在本类中创建本类的对象对外使用
        public static final Sex man = new Sex("男")
        1.构造函数的私有化,可以防止别人实例化对象,传入其它的值
        2.而我们在本类中创建了本类的对象,可以给别人调用使用(调用的就只能是我们实例化的对象,这个时候我们就已经固定了能够使用的值)
        3.因为本类的构造函数私有化了,不能创建对象,static是为了不用实例化调用使用的(或者获取枚举类对象)
        4.final(什么意思没弄懂,个人理解:可能是为了怕别人乱改数据吧!)

    jdk1.5对上面的问题提出了新的解决方案:就是使用枚举类解决(其实原理一样,反编译就可以看出来,只是简化了书写)

    枚举的格式:
        
        enum 类名{
            //枚举值
        }    

    枚举要注意的细节:
        1.枚举类也是一个特殊的类
        2.枚举值默认的修饰符是public static final(可以进行反编译验证)
        3.枚举值的数据类型是枚举值所属类的类型,然后枚举值是指向了本类的对象的(枚举值也就是成员变量)
        4.枚举类的默认的构造函数的修饰符是private
        5.枚举值可以自定义自己的成员变量和成员方法
        6.枚举值也可以自定义构造函数,但是构造函数必须私有化
        7.枚举类可以定义抽象方法,但是枚举值必须实现抽象方法
        8.枚举值必须要位于本类的第一个语句

    使用场景:一些方法运行时,他需要的数据不能是任意的,这个时候也我们就可以使用枚举

    首先我们来看看不使用枚举类的一些实例

    不存在抽象方法的实例

    class  Sex{
        
        public static final Sex man = new Sex("男");
        public static final Sex woman = new Sex("女");
        
        String value;
        private Sex(String value) {
            this.value = value;
        }
    }
    
    public class Demo1 {
        public static void main(String[] args) {
            System.out.println(Sex.man.value);
        }
    
    }

    存在构造方法的实例:

    abstract class Sex{
        
        public static final Sex man = new Sex("男") {
    
            @Override
            public void run() {
                System.out.println("男人再跑。。。");
                
            }
        };
        public static final Sex woman = new Sex("女") {
    
            @Override
            public void run() {
                System.out.println("女人再跑。。。");
                
            }
        };
        
        String value;
        private Sex(String value) {
            this.value = value;
        }
        
        public abstract void run();
    }
    
    public class Demo1 {
        public static void main(String[] args) {
            //通过调用成员变量获取枚举类对象
            Sex man = Sex.man;
            System.out.println(man.value);
            man.run();
        }
    }

    下面我们来看看是使用枚举类的实例(原理跟上面的两个例子一样):

    不存在抽象方法

    enum MySex{
        man("男"),woman("女");
        String value;
    
        private MySex(String value) {
            this.value = value;
        }
    }
    
    public class Demo2 {
        public static void main(String[] args) {
            //获取枚举类对象
            MySex man = MySex.man;
            System.out.println(man.value);
        }
    }

    存在抽象方法实例:

    enum MySex{
        man("男") {
            @Override
            public void run() {
                
                System.out.println("男人再跑。。。");
            }
        },woman("女") {
            @Override
            public void run() {
                
                System.out.println("女人再跑。。。");
            }
        };
        
        String value;
    
        private MySex(String value) {
            this.value = value;
        }
        public abstract void run();
    }
    
    public class Demo2 {
        public static void main(String[] args) {
            //获取枚举类对象
            MySex man = MySex.man;
            System.out.println(man.value);
            man.run();
        }
    }

  • 相关阅读:
    HBase 高性能加入数据
    Please do not register multiple Pages in undefined.js 小程序报错的几种解决方案
    小程序跳转时传多个参数及获取
    vue项目 调用百度地图 BMap is not defined
    vue生命周期小笔记
    解决小程序背景图片在真机上不能查看的问题
    vue项目 菜单侧边栏随着右侧内容盒子的高度实时变化
    vue项目 一行js代码搞定点击图片放大缩小
    微信小程序进行地图导航使用地图功能
    小程序报错Do not have xx handler in current page的解决方法
  • 原文地址:https://www.cnblogs.com/zjdbk/p/9025703.html
Copyright © 2011-2022 走看看