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. android中获取 bitmap 像素的颜色 之吸管取色功能

    本功能是参考android API colorPickerView修改,实现类似与PS中吸管取色功能.也就是可以对图片的任意位置取该位置的RGB.本demo中,完成了色盘取色功能.当点击色盘的某个位置 ...

  2. IP数据报首部校验和算法

    当用google搜索IP数据报首部校验和算法的时候,总是看到的是代码,没有看到其过程,于是就有了此文,如有错误请指正.文章省略一点,呵呵   IP/ICMP/IGMP/TCP/UDP等协议的校验和算法 ...

  3. android 由于界面控件过多耗时处理办法

    在开发当中,有时候可能界面嵌套较多,那么导致控件实例化增多,有时候会大大影响界面加载的速度,特别在viewpage中的时候,要是第一页里面要inflate一个控件比较多的页面的时候,就会影响整个Act ...

  4. FileStream -- 复制文件

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. WCF技术剖析之二十: 服务在WCF体系中是如何被描述的?

    原文:WCF技术剖析之二十: 服务在WCF体系中是如何被描述的? 任何一个程序都需要运行于一个确定的进程中,进程是一个容器,其中包含程序实例运行所需的资源.同理,一个WCF服务的监听与执行同样需要通过 ...

  6. 最简单的基于FFMPEG+SDL的视频播放器 ver2 (採用SDL2.0)

    ===================================================== 最简单的基于FFmpeg的视频播放器系列文章列表: 100行代码实现最简单的基于FFMPEG ...

  7. ImageMagick wrapper for php

    https://code.google.com/archive/p/phmagick/

  8. uvc摄像头代码解析7

    13.uvc视频初始化 13.1 uvc数据流控制 struct uvc_streaming_control { __u16 bmHint; __u8 bFormatIndex; //视频格式索引 _ ...

  9. android优化原理

    时间换时间: 数据的异步载入 分批载入. 开机加速. 时间换空间:  分页. 空间换时间: everything.exe 音乐 图库 在开机启动后, sd卡被挂载 生成数据库. 空间换空间: 8G内存 ...

  10. ubuntu 安装maven提示出错 The program &#39;mvn&#39; can be found in the following packages

    问题: I am trying to install apache maven 3 in Ubuntu 12.04 lts. What I did was open the terminal then ...