枚举类型是JDK1.5的新特性。显然,enum很像特殊的class,实际上enum声明定义的类型就是一个类。而这些类都是类库中Enum类的子类(java.lang.Enum<E>)。它们继承了这个Enum中的许多有用的方法。
示例:
 1 public enum Color {
 2
 3     RED("红色"),BLUE("蓝色"),WHITE("白色"),BLACK("黑色"),YELLO("黄色") ;  // 这些枚举值都是public static final的类型的
 4
 5
 6     private String color;    //自定义数据类型 public,protected,private类型都可以,这里private是为了封装
 7
 8     private Color(String color){  //构造器只能私有private,绝对不允许有public构造器。
 9         this.color =color;
10     }
11
12 }
13
14 class Main{
15     public static void main(String[] args){
16         Color color = Color.BLUE;
17         System.out.println(color);  //BLUE,toString()方法:返回枚举常量的名称。
18
19         int order = color.ordinal(); // order = 1 返回枚举定义的顺序,从0开始计算
20
21         Color[] clolors = Color.values(); //返回一个包含全部枚举值得数组
22         for (Color c:clolors){
23             System.out.println(c);
24         }
25
26         System.out.println(Color.valueOf("RED"));
27
28
29         boolean rs = color.equals(Color.BLUE); //比较两个枚举类对象的引用。
30     }
31 }

枚举类型其实就是个class,但是枚举类型同时也是个比较特殊的class。
1.其枚举值(RED,BLUE...)是Color的类对象(类实例):
Color c=Color.RED; 

而且这些枚举值都是public static final的,也就是我们经常所定义的常量方式,因此枚举类中的枚举值最好全部大写。
2.即然枚举类是class,当然在枚举类型中有构造器,方法和数据域。但是,枚举类的构造器有很大的不同:
(1) 构造器只是在构造枚举值的时候被调用。
(2) 构造器只能私有private,绝对不允许有public构造器。这样可以保证外部代码无法新构造枚举类的实例。这也是完全符合情理的,因为我们知道枚举值是public static final的常量而已。 但枚举类的方法和数据域可以允许外部访问。
3、所有枚举类都继承了Enum的方法,下面我们详细介绍这些方法。
(1)  ordinal()方法: 返回枚举值在枚举类种的顺序。这个顺序根据枚举值声明的顺序而定,这些顺序都是从0开始计数的。 
Color.RED.ordinal();  //返回结果:0
Color.BLUE.ordinal();  //返回结果:1

 
       (2)  compareTo()方法: Enum实现了java.lang.Comparable接口,因此可以比较象与指定对象的顺序。Enum中的compareTo返回的是两个枚举值的顺序之差。当然,前提是两个枚举值必须属于同一个枚举类,否则会抛出ClassCastException()异常。
 Color.RED.compareTo(Color.BLUE);  //返回结果 -1

(3)  values()方法: 静态方法,返回一个包含全部枚举值的数组。 
     

Color[] colors=Color.values();  //colors = {RED,BLUE,BLACK YELLOW,GREEN}

(4)  toString()方法: 返回枚举常量的名称。
Color c=Color.RED;
System.out.println(c);//返回结果: RED

(5)  valueOf()方法: 这个方法和toString方法是相对应的,返回带指定名称的指定枚举类型的枚举常量。
Color.valueOf("BLUE");   //返回结果: Color.BLUE 

(6)  equals()方法: 比较两个枚举类对象的引用。
4、枚举类可以在switch语句中使用。

 Color color=Color.RED;   switch(color){   case RED: System.out.println("it's red");break;   case BLUE: System.out.println("it's blue");break;   case BLACK: System.out.println("it's blue");break;   }  

总结:那我们什么时候使用枚举呢?
这里引用《effective java第二版》”每当需要一固定常量的时候。当然,这包括天然的枚举类型,例如行星、一周的天数以及棋子的数目等等。但也包括你在编译时就知道所有其可能值得其他的集合,例如菜单的选项,操作代码以及命令行标记等。枚举类型的常量集合并不一定始终不变。“ 
原文链接:http://blog.csdn.net/cilen/article/details/7262454

转载于:https://www.cnblogs.com/yfyzy/p/5677220.html

java枚举类型详解相关推荐

  1. java枚举使用详解

    http://www.cnblogs.com/linjiqin/archive/2011/02/11/1951632.html java枚举使用详解 在实际编程中,往往存在着这样的"数据集& ...

  2. Java 枚举(1): 详解7种常见的用法

    目录 用法一:常量 用法二:switch 用法三:向枚举中添加新方法 用法四:覆盖枚举的方法 用法五:实现接口 用法六:使用接口组织枚举 用法七:关于枚举集合的使用 JDK1.5引入了新的类型--枚举 ...

  3. Java魔法堂:枚举类型详解

    一.前言 Java的枚举类型相对C#来说具有更灵活可配置性,Java的枚举类型可以携带更多的信息. // C# enum MyColor{RED = 0,BLUE = 1 } Console.Writ ...

  4. java中枚举类型详解

    枚举类型的引入: 枚举是从java5开始提供的一种新的数据类型,是一个特殊的类,就是固定的多个常量对象的集合. 定义格式: [修饰]enum 枚举类名 { 常量A,常量B,常量C; } 代码: pac ...

  5. c枚举类型enum例题_C语言--enum,typedef enum 枚举类型详解

    原文:http://z515256164.blog.163.com/blog/static/32443029201192182854300/ 有改动 C语言详解 - 枚举类型 注:以下全部代码的执行环 ...

  6. Java 枚举(enum) 详解7种常见的用法<详细>

    JDK1.5引入了新的类型--枚举.在 Java 中它虽然算个"小"功能,却给我的开发带来了"大"方便. 大师兄我[大师兄]又加上自己的理解,来帮助各位理解一下 ...

  7. Java 枚举(enum) 详解7种常见的用法-小白笔记

    目录 用法一:常量 用法二:switch 用法三:向枚举中添加新方法 用法四:覆盖枚举的方法 用法五:实现接口 用法六:使用接口组织枚举 用法七:关于枚举集合的使用 用法一:常量 在JDK1.5 之前 ...

  8. Java (枚举) Enum 详解

    枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数.枚举在日常生活中很常见,例如表示星期的SUNDAY.MONDAY.TUESDAY.WEDNESDAY.THURSDAY.FRIDAY.SA ...

  9. Java 枚举(enum) 详解7种常见的用法

    JDK1.5引入了新的类型--枚举.在 Java 中它虽然算个"小"功能,却给我的开发带来了"大"方便. 大师兄我[大师兄]又加上自己的理解,来帮助各位理解一下 ...

  10. C++ 枚举类型详解

    枚举类型的定义:枚举类型(enumeration)是 C++ 中的一种派生数据类型,它是由用户定义的若干枚举常量的集合. 定义格式:枚举类型的定义格式为: enum <类型名> {< ...

最新文章

  1. MySQL 空间数据 简单操作
  2. 网站降低用户跳出率的常见技巧有哪些?
  3. 68.视图在数据库系统三级结构的哪一级上?
  4. 设计模式C++实现(2)——策略模式
  5. python查找字符串关键词_Python字符串查找基本操作案例解析
  6. DevExpress的PdfViewer添加工具栏实现PDF打开、预览、保存、打印
  7. nyist -- 组队赛(二)
  8. 世界最小晶体管问世 栅极长度仅一纳米
  9. PADS中Layer25层的作用(Z)
  10. 王思聪在京被执行案和解了!已履行5000万
  11. 怎么看电脑配置高不高_辣椒产量高不高?关键看播种前的种子处理,你知道怎么做吗?...
  12. Linux emacs考场配置及对拍脚本
  13. 初识liux简单命令
  14. java实现Tomasulo算法_并行计算机组成与设计pdf
  15. 使用 IDEA 的阿里插件扫描出的问题的级别
  16. Paddlenlp之UIE分类模型【以情感倾向分析新闻分类为例】含智能标注方案)
  17. ifft matlab报错,傅立叶逆变换ifft之后出现虚数
  18. 【番杰的问答笔记】C语言的命令注意事项
  19. 计算机等级考试一级ps内容,计算机等级考试《一级ps》备考练习及答案
  20. 号称“更快更稳”的华为云全新云服务器S6性能大评测

热门文章

  1. python 发送邮件附件csv_python给指定csv表格中的联系人群发邮件(带附件的邮件)
  2. nginx IP 80跳转443
  3. 数据库 读锁(共享锁)、 写锁(排他锁)
  4. gitlab查看word文档_gitlab迁移
  5. SpringMVC学习(七)使用JSON传递数据、jackson和fastjson的使用、处理JSON传输的乱码问题
  6. mysql5.5默认引擎,在MySQL5.5以上系统中,默认的存储引擎是( )。
  7. 熟练的运用计算机英语怎么说,对什么运用的熟练用英语怎么说?
  8. 自动化运维工具 Ansible ,SaltStack,Salt,Puppet
  9. ubuntu 17.x/CentOS 7.x中安装JAVA JDK
  10. 项目在服务器的绝对路径,项目在云服务器上的绝对路径