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. [教程]安装青鸟云Web服务器

    青鸟云Web服务器 支持的安装环境: Windows XP (32bit) Windows Server 2003/R2 (32bit) Windows 7 (32/64bit) Windows Se ...

  2. 蓝桥杯java高职组

    标题1: 猜年龄     美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学.他曾在1935~1936年应邀来中 国清华大学讲学.     一次,他参加某个重要会议,年轻的脸孔引人注目.于是 ...

  3. 第14周 项目三-OOP版电子词典

    做一个简单的电子词典.在文件dictionary.txt中,保存的是英汉对比的一个词典,词汇量近8000个,英文.中文释义与词性间用'\t'隔开. (1)编程序,由用户输入英文词.显示词性和中文释义. ...

  4. Makefile学习(二)[第二版]

    复杂实例 #演示样例1:在上一个演示样例的基础上再添加一个可运行文件03test[改动之处已标红] .PHONY: clean all CC = gcc CFLAGS = -Wall -g BIN = ...

  5. C语言,C++,static

    术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量.随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数.为了避 ...

  6. Ormlite自定义db的位置和自动更新问题

    先说说以下为测试代码,有点乱,大家讲究着看.以下例子都是采用的ormlite的框架. 第一步,自定义数据库的位置: 建议一个类DatabaseHelper 继承 OrmLiteSqliteOpenHe ...

  7. SSH2三大框架整合警告

    *********************************************************************** * WARNING!!! * * * * >> ...

  8. 服务启动错误1053,一例解决方案(给用户添加NetworkService权限)

    WIndows XP的服务中,有一个服务需要以NT  AUTHORITY/NetworkService用户启动,但怎么也启动不起来,使用本地系统帐户启动没有任何问题,但是换成NetworkServic ...

  9. json 模块

    JSON: JSON-JSON (JavaScript 对象标记) 编码/解码 简介: use JSON; # imports encode_json, decode_json, to_json an ...

  10. VC动态轨迹画线

    分类: 2.4 线程/图形学2010-04-30 22:14 1878人阅读 评论(0) 收藏 举报 文档null 这是一个绘制直线的简单绘图程序,能过实现动态轨迹画线,在拖动时产生临时线来表示可能画 ...