• 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();
        }
    }

  • 相关阅读:
    HDU 4031 Attack(离线+线段树)(The 36th ACM/ICPC Asia Regional Chengdu Site —— Online Contest)
    BZOJ 1010 玩具装箱toy(四边形不等式优化DP)(HNOI 2008)
    分布式事务二阶提交DTS系统
    flume原理及代码实现
    Liferay JSP Tag Libraries介绍
    如何用maven tycho构建自己的Eclipse RCP应用
    如何合并两个git commit
    推荐一个好用的git图形化工具
    git gc干了啥
    如何把VS Code的Language Server Protocol整合到Eclipse中来
  • 原文地址:https://www.cnblogs.com/zjdbk/p/9025703.html
Copyright © 2020-2023  润新知