Java高级特性之枚举

在Java SE5之前,我们要使用枚举类型时,通常会使用static final 定义一组int常量来标识,代码如下

public static final int MAN = 0;
public static final int WOMAN = 1;

相信很多小伙伴,在实际开发中也是那么干的,既然这样已经能实现枚举的功能,为什么还要引入枚举呢?我们接着往下看当我们需要是同这组“int枚举”是代码如下

public void showSex(int sex){
     switch(sex){
        case MAN:
           System.out.println("this is a boy");   
        break;    
        case WOMAN:
           System.out.println("this is a Girl");   
        break; 
      } 
}

看起来这些貌似也没什么问题,但是我们知道,一个项目基本都是基于团队开发,或许只有你自己知道int类型的1代表gril,0代表Boy。其他同事看到这个函数根本不知道其中的含义,这样的代码很明显阅读性很差,从而会造成沟通成本很高。我们接着往下看,现在你为你的func写了很nice的注释,傻子都能看得懂(0 boy,1 gril)。但是项目组不可避免的总会出现那么一两个傻子,非要给你传个3进来,而且这样的错误编译器不会报任何错误,运行时会造成什么bug,这个只有乔老爷知道了。所以这样的代码是极不安全的。使用枚举就能很好的避免上面的问题,接下来我们就来理一理枚举的用法。
枚举用于存储数量有限的一组固定的数据集。使用场景:上面说到的性别的表示,一年四级春夏秋冬的表示,一周七天的表示,颜色的表示等等。
枚举的简单用法

 // 普通枚举
 public enum ColorEnum {
        white, red, green, blue;
 }

    /**
     * 
     * 枚举中有一个自带的静态方法values(),返回enum实例的数据并且该数组中的元素顺序和声明时的顺序一样 
     * 枚举也可以像普通的类一样可以添加属性和方法,可以为它添加静态和非静态的属性或方法
     */
    public enum SeasonEnum {
        //注:枚举写在最前面,否则编译出错
        spring, summer, autumn, winter;

        private final static String position = "test";

        public static SeasonEnum getSeason() {
            if ("test".equals(position))
                return spring;
            else
                return winter;
        }
    }
     /**
     * 带构造器的枚举
     * 必须带有一个参构造器和一个属性跟方法,否则编译出错
     * 
     */
    public enum Mode {
        PULLDOWN("下拉"), PULLUP("上拉");
        private final String value;

        /**
         * 构造器默认也只能是private, 从而保证构造函数只能在内部使用
         * 
         */
        private Mode(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

枚举中还有一个ordinal()方法返回一个int值,这是每个enum实例在声明时的次序,从0开始。枚举类还实现了Compareable接口,所以他具有compareTo()方法。同时还实现了Serializable接口,还自动为你提供了equals()和hashCode()方法。除了不能继承一个枚举类之外,我们基本上可以把枚举类当成一个常规的Java类,可以往其中添加新的方法,包括抽象方法甚至main方法。
现在我们用枚举来实现上面的那个性别函数

public enum EnumSex {
        MAN, WOMAN

    }

    public static void showSex(EnumSex EnumSex) {
        switch (EnumSex) {
        case MAN:
            System.out.println("this is a boy");
            break;
        case WOMAN:
            System.out.println("this is a girl");
            break;
        }
    }

    public static void main(String[] args) {
        showSex(EnumSex.MAN);
        // showSex(EnumSex.Renyao) 编译报错

    }

这样既有很好的阅读性又避免的安全性问题

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 《Java核心技术 卷II:高级特性(原书第10)》是由美国著名计算机科学家Cay S. Horstmann所写的一本Java高级编程技术书籍,是Java程序员必读的经典之一。 本书囊括了Java中许多高级特性和技巧,如泛型、集合、并发编程、网络编程、注解、反射等。其中,泛型是本书的一个重点,它能够提高代码的类型安全性和可读性,降低代码编写的复杂度和维护的难度。集合则是Java程序员必备的工具之一,本书详细介绍了集合框架的设计和使用,可以帮助开发人员更加高效地处理数据结构。 并发编程是Java的特色之一,也是实现高性能应用的必备技能。本书详细介绍了Java并发编程的原理、技巧和最佳实践,包括线程、线程池、锁、原子操作、并发容器等。这些技术在提高应用性能的同时,也要注意线程安全和死锁等问题。 网络编程是Java程序员必备的另一个技能,本书介绍了Java中的Socket编程和Java NIO(New IO)技术,能够帮助读者更好地理解网络编程的原理和实现。 此外,本书还介绍了注解和反射等高级特性,为Java程序员提供了更加灵活、扩展和自动化的编程方式。 总的来说,《Java核心技术 卷II:高级特性(原书第10)》是一本权威、全面、深入的Java高级编程技术书籍,能够帮助Java程序员提升自己的编程能力,实现高性能、高可靠的应用程序。 ### 回答2: 《Java核心技术 卷II:高级特性(原书第10)》是一本深入讲解Java高级特性的经典书籍。本书从面向对象编程、泛型、反射、注解、枚举、Lambda表达式、并发编程、网络编程、JDBC等多个方面全面阐述了Java语言的高级特性。 在本书中,作者对Java的面向对象编程进行了深入的解析,包括继承、多态、抽象类和接口等重要概念的详细讲解。此外,本书还详细介绍了Java语言中的泛型、反射和注解等高级特性,为读者深入理解Java语言的运行机制提供了良好的基础。 本书还特别强调了Java语言中的并发编程技术。通过讲述线程、锁、原子操作等多个并发编程技术的实现方式和应用场景,让读者深入了解Java语言在多线程编程方面的实现方式和应用方法。 此外,本书还详细介绍了Java语言中的网络编程和JDBC技术。通过讲解网络协议、Socket编程、URL和URLConnection等相关知识点,读者能够深入了解Java语言在网络编程方面的实现方式和运用场景。同时,本书还介绍了Java语言中的JDBC技术,包括数据库连接、事务处理、SQL编程和ORM等内容,让读者全面掌握Java语言在数据库编程方面的应用技巧。 总的来说,《Java核心技术 卷II:高级特性(原书第10)》是一本系统全面介绍Java语言高级特性和应用技术的书籍,对于Java开发人员来说,是一本不可多得的学习资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值