java学习笔记10--枚举

在JDK1.5之前,java可以有两种方式定义新类型:类和接口。对于大部分面向对 象编程来说,这两种方法看起来似乎足够了,但是在一些特殊情况下,这些方法就不适合。例如,想定义一个Color类,它只能有Red 、Green、 Blue三种值,其他的任何值都是非法的,那么JDK1.5之前虽然可以构造这样的代码,但是要做很多的工作,也有可能带来各种不安全的问题。而 JDK1.5之后引入的枚举类型(Enum)就能避免这些问题。

所谓的枚举就是规定好了指定的取值范围,所有的内容只能从指定的范围中取得。

使用简单类完成颜色的固定取值问题。

  1. package com.itmyhome;
  2. class Color{
  3. public static final Color colorRed =  new Color("红色");
  4. public static final Color colorGreen =  new Color("蓝色");
  5. public static final Color colorBlue =  new Color("绿色");
  6. private String name;
  7. public Color(String name){
  8. this.name = name;
  9. }
  10. public String getName() {
  11. return name;
  12. }
  13. public void setName(String name) {
  14. this.name = name;
  15. }
  16. }
  17. public class T {
  18. public static void main(String[] args) throws Exception{
  19. Color cRed = Color.colorRed;
  20. System.out.println(cRed.getName());
  21. }
  22. }

此时,程序限定了所能取的对象的范围,所以达到了枚举的功能,以上是一种枚举的方式,在最早的java开发中因为没有枚举这种概念,所以有时候也使用接口表示。

  1. interface Color{
  2. public static final int RED = 1;
  3. public static final int GREEN = 2;
  4. public static final int BLUE = 3;
  5. }

定义一个枚举类型

在JDK1.5之后,引入了一个新的关键字类型 enum,可以直接定义枚举类型,格式如下:

【public】 enum  枚举类型名称{

           枚举对象1,枚举对象2,.......枚举对象n;

}

使用enum关键字定义。

  1. public enum Color {
  2. RED,GREEN,BLUE;
  3. }

因为枚举已经指定好了范围,所以可以使用foreach 进行全部的输出,使用“枚举.values()”的形式取得全部的枚举内容。

  1. package com.itmyhome;
  2. enum Color {
  3. RED,GREEN,BLUE;
  4. }
  5. public class T {
  6. public static void main(String[] args) throws Exception{
  7. for(Color c:Color.values()){
  8. System.out.println(c);
  9. }
  10. }
  11. }

还可以直接将内容在switch语句上使用。

  1. package com.itmyhome;
  2. enum Color {
  3. RED, GREEN, BLUE;
  4. }
  5. public class T {
  6. public static void main(String[] args) throws Exception{
  7. for(Color c:Color.values()){
  8. print(c);
  9. }
  10. }
  11. public static void print(Color color){
  12. switch(color){
  13. case RED:{
  14. System.out.println("红色");
  15. break;
  16. }
  17. case GREEN:{
  18. System.out.println("绿色");
  19. break;
  20. }
  21. case BLUE:{
  22. System.out.println("蓝色");
  23. break;
  24. }
  25. default:{
  26. System.out.println("未知颜色");
  27. }
  28. }
  29. }
  30. }

Enum

从前面已经清楚的知道,使用enum关键字可以定义一个枚举,实际上此关键字表示的是 java.lang.Enum类型,即:使用enum声明的枚举类型,就相当于定义一个类,而此类则默认继承java.lang.Enum类。

java.lang.Enum类的定义如下:

  1. public abstract class Enum<E extends Enum<E>>
  2. extends Object
  3. implements Comparable<E>, Serializable

此类定义的时候使用了泛型机制,而且实现了Comparable接口以及Serializable接口,证明此中类型是可以比较,可以被序列化的。

枚举类的主要方法

Enum类的构造方法:

  1. protected  Enum(String name, int ordinal)

构造方法中接收两个参数,一个表示枚举的名字,一个表示枚举的序号。

  1. for(Color c:Color.values()){
  2. System.out.println(c.name()+"----"+c.ordinal());
  3. }

希望可以使用一些文字表示颜色的信息,则可以按照最早的Color类的形式,在枚举中定义属性及自己的构造方法,但是一旦定义有参构造之后,在声明枚举对象的时候就必须明确的调用构造方法,并传递参数。

  1. package com.itmyhome;
  2. enum Color {
  3. RED("红色"), GREEN("绿色"), BLUE("蓝色");   //传入参数
  4. private String name;
  5. private Color(String name){  //定义构造方法
  6. this.name = name;
  7. }
  8. public String getName() {
  9. return name;
  10. }
  11. public void setName(String name) {
  12. this.name = name;
  13. }
  14. }
  15. public class T {
  16. public static void main(String[] args) throws Exception{
  17. for(Color c:Color.values()){
  18. System.out.println(c.ordinal()+"----"+c.name()+"----"+c.getName());
  19. }
  20. }
  21. }

java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型

java学习笔记10--枚举的更多相关文章

  1. 0029 Java学习笔记-面向对象-枚举类

    可以创建几个对象? n多个:大部分的类,都可以随意创建对象,只要内存不爆掉 1个:比如单例类 有限的几个:采用单例类的设计思路,可以只允许创建少数的几个特定的对象:还有就是枚举类. 创建少数几个对象, ...

  2. Java 学习笔记(10)——容器

    之前学习了java中从语法到常用类的部分.在编程中有这样一类需求,就是要保存批量的相同数据类型.针对这种需求一般都是使用容器来存储.之前说过Java中的数组,但是数组不能改变长度.Java中提供了另一 ...

  3. Java学习笔记10

    31.编写当年龄age大于13且小于18时结果为true的布尔表达式age > 13 && age < 18 32.编写当体重weight大于50或身高大于160时结果为t ...

  4. java学习笔记(10) —— ActionContext、ServletActionContext、ServletRequestAware用法

    核心思想 1.ActionContext HttpServletRequest getAttribute setAttribute ActionContext get put //ActionCont ...

  5. Java学习笔记10(面向对象三:接口)

    接口: 暂时可以理解为是一种特殊的抽象类 接口是功能的集合,可以看作是一种数据类型,是比抽象类更抽象的"类" 接口只描述所应该具备的方法,并没有具体实现,具体实现由接口的实现类(相 ...

  6. Java学习笔记之——枚举类

    枚举可以限定类的值只是有限个,例如:星期,只有星期一到星期天 语法案例:

  7. Java学习笔记-10.io流

    1.输入流,只能从中读取数据,而不能向其写出数据.输出流,只能想起写入字节数据,而不能从中读取. 2.InputStream的类型有: ByteArrayInputStream 包含一个内存缓冲区,字 ...

  8. Swift学习笔记(10)--枚举

    1.定义语法: enum SomeEnumeration { // enumeration definition goes here } 2.使用 enum CompassPoint { case N ...

  9. Java学习笔记10(面对对象:构造方法)

    在开发中经常需要在创建初始化对象时候明确对象的属性值, 比如Person对象创建的时候就给Person的属性name,age赋值, 这里就要用到构造方法: 构造方法是类的一种特殊方法,它的特殊性体现在 ...

  10. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

随机推荐

  1. Java 使用JDBC、DBCP、C3P0访问数据库

    JDBC: Connection conn = null; Statement stmt = null; ResultSet rs = null; // 1.加载驱动 try { Class.forN ...

  2. Thawte SSL123 SSL证书-中国证书.com

    Thawte SSL123 SSL证书是域名验证型证书.也是Thawte最廉价的一款证书.该证书签发方便,仅仅须要验证域名全部权就可以签发,无需提交认证文件,通常签发时间仅仅须要1-2个小时.SSL1 ...

  3. boost uuid 学习笔记

    #include <vector>#include <iostream>#include <boost/uuid/uuid.hpp>#include <boo ...

  4. EasyUI - According 分类列表

    效果: html代码: <div id="aa" class="easyui-accordion" style="width: 300px; h ...

  5. java web解决表单重复提交问题

    我们大家再进行web开发的时候,必不可少会遇见表单重复提交问题.今天就来给总结如何解决表单提交问题,欢迎大家交流指正. 首先我们在讨论如何解决表单重复提交问题之前先来解决三个问题:1.什么叫表单重复提 ...

  6. 基于visual Studio2013解决面试题之0506取和为m的可能组合

     题目

  7. 1.1.0-学习Opencv与MFC混合编程之---全屏截图,保存为BMP图像(并增加快捷键)

    源代码:http://download.csdn.net/detail/nuptboyzhb/3961677 Ø  添加全屏截图菜单项,菜单项的属性如下; Ø  为该菜单项建立类向导. 编辑消息处理函 ...

  8. 关于VC6编译LPDIRECT3D8不通过的问题

    重装了系统,打开以前的工程看看,重新编译发现类似的错误: error C2146: syntax error : missing ';' before identifier 'lpdi' fatal ...

  9. 网页 css

    css---- 层叠样式表(Cascading Style Sheet) 一,层叠样式表的分类 1,外部样式表:在外部定义样式表,然后在页面head里面附加该样式表 2,内嵌样式表:直接在网页head ...

  10. 延迟函数 比sleep效果好

    sleep是会阻塞线程的 网上有些延迟函数测试下来还是会阻塞,而接下来推荐的代码则不会   1 2 3 4 5 6 7 8 9 procedure delay(dwMilliseconds:integ ...