快速归类整型常数——枚举
  枚举是一个被命名的整型常数的集合。我们可以事先考虑到某一变量可能的取值,尽量用自然语言中含义清楚的单词来表示它的每一个值,这种方法称为枚举方法,用这种方法定义的类型称为枚举类型。

11.2 自定义的枚举

//如果没有枚举关键字,如何使用枚举功能
public class Color
{private String name;public static final Color RED=new Color("红色");public static final Color GREEN=new Color("绿色");public static final Color BLUE=new Color("蓝色");public String getName(){return name;}public void setName(String name){this.name=name);private Color(String name){setNmae(name);}public static Color getInstance(int i){if(i==0){return RED;}if(i===1){return GREEN;);if(i==2){return BLUE;};return null;}public static void main(String[] args){Color c1=new Color.getInstance(0);System.out.pritnln(c1.getName());Color c2=new Color.getInstance(1);System.out.println(c2.getName());Color c3=new Color.getInstance(2);System.out.prtinln(c3.getName());}
}

11.3.1 常见的枚举定义方法

//先定义后说明,变量a、b、c为枚举类型WeekDay
enum WeekDay{Mon,Tue,Wed,Thu,Fri,Sat,Sun};
enum WeekDay a,b,c;//定义的同时说明
enum WeekDay{Mon,Tue,Wed,Thu,Fri,Sat,Sun}a,b,c;//或者直接说明,无需枚举名
enum {Mon,Tue,Wed,Thu,Fri,Sat,Sun}a,b,c;

11.3.2 枚举的使用

enum MyColor{红色,绿色,蓝色};
public class EnumColor
{public static void main(String[] args){MyColor c1=MyColor.红色;System.out.prtinln(c1);MyColor c2=MyColor.绿色;System.out.prtinln(c2);MyColor c2=MyColor.蓝色;System.out.prtinln(c3);}
}

11.3.3 在switch语句中使用枚举

enum MyColr{红色,绿色,蓝色};
public class EnumSwitch
{public static void main(String[] args){MyColor c1=MyColor.绿色;switch(c1){case 红色:System.out.println("我是红色!");break;case 绿色:System.out.println("我是绿色!");break;case 蓝色:System.out.println("我是蓝色!");break;}}
}

11.4 枚举类和枚举关键字

 枚举类是在Java.lang包下定义的一个公共类,它的作用是用来构造新的枚举类型。枚举类中定义了十多个方法,每种方法都是对用Enum创建的对象实施操作
//通过调用Enum类中的方法ordinal()方法,输出枚举类型中的每一个对象编号
enum MyColor{红色,绿色,蓝色};
public class Test{public static void main(String[] args){MyColor[] allColor=MyColor.values();//用枚举数组读取枚举中的值for(MyColor aColor:allColor)System.out.println(aColor.name()+"-->"+aColor.ordinal());}
}

11.4.3 枚举类与枚举关键字的联系

实际上,使用enum关键字,相当于定义了一个类,该类继承自Enum类。而在Enum类中的方法,
访问权限都是Enum类中存在的Valueof()方法,该方法返回带指定名称的指定枚举类型的枚举
常量,在下面的范例中,先用enum关键字定义了一个枚举对象Color,然后调用Enum类中的
valueOf()方法enum Color{红色,绿色,蓝色};
public class Test{public static void main(String[] args){Color c=Color.valueOf(Color.class,"红色");System.out.println(c);}
}
 下面总结一下使用枚举类型的注意事项:(1)如果enum定义的枚举类访问权限定义为public,则需要单独形成一个.java文件,
即不可以与包含main方法的public类同处于一个文件爱你。如果enum定义的枚举类访问权限为
默认类型,即enum关键字前没有修饰符,则enum定义的对象可在同一个包里访问,无需重复定义
。例如前面的范例中都在一个包中,则所定义的枚举类型Color(MyColor)事实上仅需要在一个
.java文件定义即可,其他用到这个枚举类型的文件可以通过导入(import)来复用这个定义(2)使用enum定义的枚举类型默认继承于java.lang.Enum类。使用enum定义的枚举,
默认会使用final修饰,因此该类无法派生子类。(3)使用enum定义的枚举类,其所有值(实际上是该类的实例)必须在枚举类的第一行显
示列出,否则这个枚举类将永远不能产生实例。在列出这些实例时,系统会自动添加public
static final修饰(4)所有使用enum定义的枚举类,都会由系统隐式提供一个valueOf()方法,该方法
可以方便地遍历所有枚举值

11.5 类集对于枚举的支持

11.5.1 EnumMap

//使用EnumMap操作枚举类型中实例
import java.util.EnumMap;
import java.util.Map;
enum Color{红色,绿色,蓝色};
public class Test{public static void main(String[] args){EnumMap<Color,String> eMap=new EnumMap<Color,String>(Color.class);eMap.put(Color.红色,"RED");//添加EnumMap元素eMap.put(Color.绿色,"GREEN");eMap.put(Color.蓝色,"BULE");for(Map.Entry<Color,String> me:eMap.entrySet())System.out.println(me.getKey()+"-->"+me.getValue());}
}

11.5.2 EnumSet

import java.util.EnumSet;
import java.util.Iterator;
enum Color{红色,绿色,蓝色};
public class Test{public static void main(String[] args){//将枚举全部的内容设置到集合中EnumSet<Color> eSet=EnumSet.allOf(Color.class);Iterator<Color> iter=eSet.iterator();while(iter.hasNext())System.out.println(iter.next());}
}
//调用noneOf()方法,对同样包含在EnumSet类中的不同方法的调用,来测试EnumSet方法
import java.util.EnumSet;
import java.util.Iterator;
enum Color{红色,绿色,蓝色};
public class Test{public static void main(String[] args){//表示此类型的空集合EnumSet<Color> eSet=EnumSet.noneOf(Color.class);Iterator<Color> iter=eSet.iterator();while(iter.hasNext())System.out.println(iter.next());}
}

11.6 深入了解枚举

11.6.1 枚举的构造方法

//NewColor定义的三个对象
enum NewColor{RED("红色",4),GREEN("绿色",5),BULE("蓝色",6);private String name;//成员变量private int index;private NewColor(String name,int index){this.name=name;this.index=index;}public static String getName(int index){for(NewColor c:NewColor.values())if(c.getIndex()==index)return c.name;return null;      }public String getName(){return name;}public static void setName(int index,String name){for(NewColor c:NewColor.values())if(c.getIndex()==index){c.name=name;return;}            }public int getIndex(){return index;}public static void setIndex(int index,String name){for(NewColor c:NewColor.values())if(c.getName()==name){c.index=index;return;}}}
public class Test{public static void main(String[] args){System.out.println("-----------输出枚举中的元素-----------");System.out.println(NewColor.RED.getIndex()+"--->"+NewColor.RED.getName());System.out.println(NewColor.GREEN.getIndex()+"--->"+NewColor.GREEN.getName());System.out.println(NewColor.BULE.getIndex()+"--->"+NewColor.BULE.getName());System.out.println("----在自定义编号和属性之后,测试-----");NewColor.setName(4,"黑色");//重新设置名称System.out.println("4--->"+NewColor.getName(4));NewColor.setIndex(7,"黑色");//重新设置索引编号System.out.println("7--->"+NewColor.getName(7));}
}

11.6.2 枚举的接口

public interface ColorInterface
{public String getColor();
}
//对新建接口抽象方法的调用。对接口中定义的抽象方法的调用,
//并且在后期声明的枚举类型中,任何一个对象都必须分别实现接口中的抽象方法
enum NewColor2 implements ColorInterface
{红色 //每个枚举对象都需要具体化从接口中继承的方法{public String getColor(){   return "RED";}}绿色 //每个枚举对象都需要具体化从接口中继承的方法{public String getColor(){   return "GREEN";}}蓝色 //每个枚举对象都需要具体化从接口中继承的方法{public String getColor(){ return "BLUE";}}
}
//测试上面的接口类型
public class TestColor
{public static void main(String[] args){for(NewColor2 c:NewColor2.values())System.out.println(c.ordinal()+"-->"+c.name()+":"+c.getColor());}
}

11.6.3 在枚举中定义抽象方法

enum NewColor3
{红色//每个枚举对象都需要实现所定义的抽象方法{public String getColor(){  return "RED";}}绿色 {public String getColor(){  return "GREEN";}}蓝色 {public String getColor(){    return "BLUE";}}public abstract String getColor();//定义抽象方法
}
public class AbstractEnum
{public static void main(String[] args){for(NewColor3 c:NewColor3.values))System.out.println(c.ordinal()+"-->"+c.name+":"+c.getColor());}
}
 1.枚举使用时的主义事项(1)枚举类型不能用public和protected修饰构造方法,构造方法的权限只能是private
或者friendly,friendly是没有修饰符的默认权限。因为枚举这种特性,所以枚举对象都是无
法在程序中通过直接调用其构造方法来初始化的(2)定义枚举类型时,如果是简单类型,那么最后一个枚举值后可以不加分号。但是如果
枚举中包含有方法,那么最后一个枚举值后面的代码必须用分号隔开2.枚举类型不可以被继承如果一个枚举类用abstract修饰,那么就说明需要其他类继承这个所谓的抽象枚举类,而
java中,规定枚举是不能被继承的,因此,枚举不能用abstract修饰,只能在枚举的实例实现
每个抽象方法

Java从入门到精通 第11章 枚举相关推荐

  1. java从入门到精通第11章_《Java从入门到精通》第十章学习笔记

    第10章 Java集合类 一.概述 Java中的java.util包中提供了一些集合类,也被称为容器,不同于数组,集合的长度是可变的,存放的是对象的引用.常用的集合有List集合.Set集合.Map集 ...

  2. Java从入门到精通 第22章 多线程

    Java从入门到精通 第22章 多线程 //单一线程的运行流程 public class Nanjing {public static void main(String[] args) {// TOD ...

  3. 《Java从入门到精通》第九章学习笔记

    第9章 类的高级特性 一.抽象类 抽象类只声明方法的存在,不能被实例化,就是说抽象类不能创建其对象,在定义抽象类时要在class前面加上abstract关键字. 1 /*定义一个抽象类Fruit,并定 ...

  4. java从入门到精通第8章_《Java从入门到精通》第七章学习笔记

    第7章 类和对象 一.类和对象的定义及关系 1.类是同一类别对象的抽象定义:可以理解为是某一类具体对象的模子,确定对象将会拥有的特性,包括该类对象具备的属性和方法. 2.对象是对类的一种具体化的客观存 ...

  5. Java从入门到精通章节练习题——第六章

    Java从入门到精通章节练习题--第六章 Exercise 1 简易计算器 Exercise 2 购买电影票 Exercise 3 计算平均分 Exercise 4 厘米与英寸互转 Exercise ...

  6. Java从入门到精通 第九章 数字处理类

    Java从入门到精通 第九章 数字处理类 一.数字格式化 二.数学运算 1)Math类 2)常用数学运算方法 三.随机数 1)Math.random()方法 2)Random类 四.大数字运算 1)B ...

  7. java从入门到精通第四版明日科技书籍简介及下载

    Java从入门到精通(第4版)(附光盘) 平装 – 2016年10月20日 <Java从入门到精通(第4版)(附光盘)>从初学者角度出发,通过通俗易懂的语言.丰富多彩的实例,详细介绍了使用 ...

  8. 1. Vue从入门到精通(第一章 vue核心)

    Vue从入门到精通(第一章 vue核心) 第一章 Vue核心 1. Vue简介 1.1 Vue是什么? 1.2 Vue的作者以及迭代版本 1.3 Vue的特点 2. 搭建Vue开发环境 2.1 安装V ...

  9. java从入门到精通 ppt_《Java从入门到精通》第4版全书完整PPT课件

    [实例简介] <Java从入门到精通>第4版全书完整PPT课件 [实例截图] [核心代码] e3a1ab08-ca73-47e5-9a3a-bec0b60c991a └── <Jav ...

  10. java从入门到精通_想要开始学java?你要的java从入门到精通布列如下!

    java从入门到精通,让我来告诉你! 毫无疑问,java是当下最火的编程语言之一.对于许多未曾涉足计算机编程的领域「小白」来说,深入地掌握java看似是一件十分困难的事.其实,只要掌握了科学的学习方法 ...

最新文章

  1. Linux系统管理学习路线图
  2. 23 Python常用模块(一)
  3. 网站的容错性设计原则
  4. 比特币黄金首遭“51%攻击”,可能动摇数字货币世界的根基
  5. 价格的格式化 php,价格格式化问题。
  6. SSO CAS 探究
  7. js 计算任意凸多边形内最大矩形_题库 | 计算机视觉常见面试题型介绍及解答 第 7 期...
  8. ubuntu下安装android ndk
  9. 如何在 ASP.NET Core MVC 5 中处理未知的 Action
  10. linux依据时间过滤文件,详解Linux查找目录下的按时间过滤的文件
  11. 【C语言】数据类型转换的问题
  12. 六月 北京站 | 高性能计算之GPU CUDA 培训
  13. 【MySQL】事务隔离级别
  14. MR Shuffle流程 入门
  15. QTTabBar功能是灰色,无法启用的解决办法
  16. 有限单元法基本原理和数值方法_有限元法基本原理
  17. 旗舰手机的拍照芯片(上)
  18. 网络爬虫排除协议robots.txt介绍及写法详解.
  19. ffmpeg批量从视频中提取出mp3音频
  20. 盘点TMT领域10家国内投资机构

热门文章

  1. matplotlib库使用
  2. matplotlib.pyplot中API介绍
  3. zookeeper分布式原理实战解析
  4. 第四季-专题16-触摸屏驱动程序设计
  5. 【译】你不知道的Chrome调试工具技巧 第六天:command 菜单
  6. EthBox以太坊开发套件,一键安装部署以太坊开发环境
  7. mysql 5.6 解压缩版安装教程
  8. 很好的一篇讲解sql优化的文章
  9. Revit二次开发之TaskDialog
  10. Posix信号量操作函数