Java基础教程(15)--枚举类型

news/2024/7/5 1:54:19

  枚举类型定义了一个枚举值的列表,每个值是一个标识符。例如,下面的语句声明了一个枚举类型,用来表示星期的可能情况:

public enum Day {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}

  实际上,这个声明定义的类型是一个类,它有7个实例。因此,在比较两个枚举类型的值时,永远不需要调用equals,直接使用“==”就可以了。
  枚举类型的值类似于一个常量,因此,按照惯例拼写都使用大写字母。而枚举类型的命名则与类名的命名规则一致。
  一旦定义了枚举类型,就可以使用这个类型来声明变量:

Day day;

  变量day只能是枚举类型Day中的一个值或null。可以使用下面的语法访问枚举值:

EnumName.ValueName

  例如,下面的语句将枚举值赋给变量day:

day = Day.SUNDAY;

  可以在一个枚举类型的对象上使用下面的方法:

  • public String name();

  返回枚举值的名字。

  • public int ordinal();

  返回枚举值的序号。枚举类型中的第一个值序号为0,第二个值序号为1,依次类推。
  下面的例子展示了枚举类型的使用:

public class EnumDemo {enum Day {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY}public static void main(String[] args) {Day day1 = Day.FRIDAY;Day day2 = Day.THURSDAY;System.out.println("The name of day1 is" + day1.name());System.out.println("The name of day2 is" + day2.name());System.out.println("The ordinal of day1 is" + day1.ordinal());System.out.println("The ordinal of day2 is" + day2.ordinal());}
}

  这个程序的输出如下:

The name of day1 is FRIDAY
The name of day2 is THURSDAY
The ordinal of day1 is 5
The ordinal of day2 is 4

  由于枚举类型是Object类的子类和Comparable接口的实现类,因此可以对枚举对象调用Object类的方法,例如equals,toString等,也可以调用Comparable接口的compareTo方法。
  在switch-case语句中使用枚举类型时,case标签可以是省略枚举类型的枚举值,例如:

switch (day) {case SUNDAY:// process SUNDAYcase MONDAY:// process MONDAY...
}

  可以定义具有数据域、构造器和方法的枚举类型:

public enum Day {SUNDAY("星期天"), MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY("星期三"),THURSDAY("星期四"), FRIDAY("星期五"), SATURDAY("星期六");public String description;private Day(String description) {this.description = description;}public String getDescription() {return description;}
}

  需要注意的是,当枚举类型中除了枚举值的声明外还有其他部分时,枚举值的声明必须是第一条语句,且结尾处需要使用分号。此外,由于枚举值的数量是在编译期就确定的,因此不建议创建新的枚举值,所以Java语法要求枚举类型的构造方法是私有的以避免被直接调用。private修饰符可省略,这种情况下,构造方法也会被默认为私有的。

转载于:https://www.cnblogs.com/maconn/p/10163287.html


http://lihuaxi.xjx100.cn/news/245168.html

相关文章

JS数字转换成货币格式

2019独角兽企业重金招聘Python工程师标准>>> // Extend the default Number object with a formatMoney() method:// usage: someVar.formatMoney(decimalPlaces, symbol, thousandsSeparator, decimalSeparator)// defaults: (2, "$", ",", &q…

android中设置控件获得焦点 (转)

android中,要使控件获得焦点,需要先setFocus,再requestFocus。 以Button为例: btn.setFocusable(true); btn.setFocusableInTouchMode(true); btn.requestFocus(); btn.req…

分享一波 RabbitMQ 面试题有答案

1、什么是rabbitmq 2、为什么要使用rabbitmq 3、使用rabbitmq的场景 4、如何确保消息正确地发送至RabbitMQ? 如何确保消息接收方消费了消息? 发送方确认模式 接收方确认机制 接收方消息确认机制 下面罗列几种特殊情况 5.如何避免消息重复投递或重…

量子力学又一突破,中国科学家首次实现量子纠缠态自检验

这也是国际上首个具有“高可靠、抗干扰”特性的纠缠态自检验实验。 最近,量子力学领域又传来好消息,中国科学技术大学的郭光灿院士团队在实验中首次实现了量子纠缠态的自检验,推动了自检验在各种量子信息过程中的基础发展。 何为量子纠缠&a…

php跨域共享session

、 $gb_DBHOSTname "127.0.0.1"; //主机的名称或是IP地址 02 $gb_DBname "dbname"; //数据库名称 03 $gb_DBuser "username"; //数据库用户名称 04 $gb_DBpass "pwd"; //数据库密码 05 $gb_COOKIE_DOMAIN .a.com; 06 $SESS_DBH …

新浪微博中的周期性爆发流量

2019独角兽企业重金招聘Python工程师标准>>> 业务背景 最近,微博平台的群发业务增长迅速,一个月内业务量暴涨70%,出现两次负载过高报警,通过紧急扩容解决。仔细思索,这一类业务场景在移动互联网中非常普遍&…

分享一波 ZooKeeper 面试题

ZooKeeper是什么?ZooKeeper提供了什么?Zookeeper文件系统ZAB协议?四种类型的数据节点 ZnodeZookeeper Watcher 机制 – 数据变更通知客户端注册Watcher实现服务端处理Watcher实现客户端回调WatcherACL权限控制机制 UGO(User/Group…

【跟着我们学Golang】之面向对象

万物皆对象。学过Java编程的都知道Java是一门面向对象的语言,它拥有封装、继承和多态的特性。那可不可以说,拥有封装、继承和多态这一特性的语言就是面向对象的语言呢? 仔细想来,也确实是这样的,因为封装、继承和多态这…