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

JDK1.5引入了新的类型——枚举。在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便。

 用法一:常量

在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

 public enum Color {
  RED, GREEN, BLANK, YELLOW
 } 

用法二:switch

JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。

 enum Signal {
   GREEN, YELLOW, RED
 }
 public class TrafficLight {
   Signal color = SignalRED;
   public void change() {
     switch (color) {
     case RED:
       color = SignalGREEN;
       break;
     case YELLOW:
       color = SignalRED;
       break;
     case GREEN:
       color = SignalYELLOW;
       break;
     }
   }
 } 

用法三:向枚举中添加新方法

如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。

 public enum Color {
   RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
   // 成员变量
   private String name;
   private int index;
   // 构造方法
   private Color(String name, int index) {
     thisname = name;
     thisindex = index;
   }
   // 普通方法
   public static String getName(int index) {
     for (Color c : Colorvalues()) {
       if (cgetIndex() == index) {
         return cname;
       }
     }
     return null;
   }
   // get set 方法
   public String getName() {
     return name;
   }
   public void setName(String name) {
     thisname = name;
   }
   public int getIndex() {
     return index;
   }
   public void setIndex(int index) {
     thisindex = index;
   }
 } 

用法四:覆盖枚举的方法

下面给出一个toString()方法覆盖的例子。

 public enum Color {
   RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
   // 成员变量
   private String name;
   private int index;
   // 构造方法
   private Color(String name, int index) {
     thisname = name;
     thisindex = index;
   }
   //覆盖方法
   @Override
   public String toString() {
     return thisindex+"_"+thisname;
   }
 } 

用法五:实现接口

所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。

 public interface Behaviour {
   void print();
   String getInfo();
 }
 public enum Color implements Behaviour{
   RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
   // 成员变量
   private String name;
   private int index;
   // 构造方法
   private Color(String name, int index) {
     thisname = name;
     thisindex = index;
   }
 //接口方法
   @Override
   public String getInfo() {
     return thisname;
   }
   //接口方法
   @Override
   public void print() {
     Systemoutprintln(thisindex+":"+thisname);
   }
 } 

用法六:使用接口组织枚举

public interface Food {
   enum Coffee implements Food{
     BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
   }
   enum Dessert implements Food{
     FRUIT, CAKE, GELATO
   }
 } 

用法七:关于枚举集合的使用

java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。关于这个两个集合的使用就不在这里赘述,可以参考JDK文档。

关于枚举的实现细节和原理请参考:

参考资料:《ThinkingInJava》第四版http://www.jb51.net/books/75540.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, 枚举用法
java中枚举的用法
枚举类型enum用法、java枚举类型enum用法、c 枚举类型enum用法、ios枚举类型enum用法、php枚举类型enum用法,以便于您获取更多的相关知识。

时间: 2024-10-26 11:14:41

Java枚举(enum) 详解7种常见的用法_java的相关文章

【转】java枚举使用详解

在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的"数据集",春夏秋冬四个数据元素组成了四季的"数据集". 在Java中如何更好的使用这些"数据集"呢?因此枚举便派上了用场,以下代码详细介绍了枚举的用法. Java代码   package com.ljq.test;      /**   * 枚举用法详解   *

java面试题——详解HashMap和Hashtable 的区别_java

一.HashMap 和Hashtable 的区别 我们先看2个类的定义 public class Hashtable extends Dictionary implements Map, Cloneable, java.io.Serializable public class HashMap extends AbstractMap implements Map, Cloneable, Serializable 可见Hashtable 继承自 Dictiionary 而 HashMap继承自Abs

Swift编程之枚举类型详解_Swift

想必写过程序的童鞋对枚举类型并不陌生吧,使用枚举类型的好处是多多的,在这儿就不做过多的赘述了.Fundation框架和UIKit中的枚举更是数不胜数,枚举可以使你的代码更易阅读并且可以提高可维护性.在Swift语言中的枚举可谓是让人眼前一亮.在Swift中的枚举不仅保留了大部分编程语言中枚举的特性,同时还添加了一些好用而且实用的新特性,在本篇文章中将领略一些Swift中枚举类型的魅力. 有小伙伴会问,不就是枚举么,有什么好说的.在Swift中的枚举怎不然,Swift中的枚举的功能要强大的多,不仅

Java实例化类详解_java

Java 中实例化类的动作,你是否还是一成不变 new 对应对象呢?     经手的项目多了,代码编写量自然会增加,渐渐的会对设计模式产生感觉.     怎样使书写出来的类实例化动作,高内聚,低耦合,又兼具一定的扩展能力呢?     本文试图从几段鲜活的代码入手,给大家呈现不一样的 Java 实例化类.     下面代码取自 com.google.zxing 源码实现: public BitMatrix encode(String contents, BarcodeFormat format,

Java并发控制机制详解_java

在一般性开发中,笔者经常看到很多同学在对待java并发开发模型中只会使用一些基础的方法.比如Volatile,synchronized.像Lock和atomic这类高级并发包很多人并不经常使用.我想大部分原因都是来之于对原理的不属性导致的.在繁忙的开发工作中,又有谁会很准确的把握和使用正确的并发模型呢? 所以最近基于这个思想,本人打算把并发控制机制这部分整理成一篇文章.既是对自己掌握知识的一个回忆,也是希望这篇讲到的类容能帮助到大部分开发者.  并行程序开发不可避免地要涉及多线程.多任务的协作和

Java中单例模式详解_java

单例模式概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机可以有若干个打印机,但只能有一个Pr

Java控制台输入输出详解

初学java时,或许大家都遇到过一个问题,从控制台获取字符,大家最常见的便是通过System.in.read();取得输入的字符,代码如下: public static void receiveOneChar(){//得到一个输入的字符 char ch='2'; System.out.println("please enter a number:"); try { ch=(char)System.in.read(); } catch (IOException e) { e.printS

Java设计模式详解之门面模式(外观模式)_java

门面模式(Facade Pattern)也叫外观模式,它隐藏系统的复杂性,并向客户端提供一个可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性,为子系统中的一组接口提供了一个统一的高层访问接口,这个接口使得子系统更容易被访问或使用.这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用. 简而言之,就是把一堆复杂的流程封装成一个接口供给用户更简单的使用,这个设计模式里有三个角色: 1)门面角色( facade ):

java RMI原理详解

[本文转载自java RMI原理详解] 定义 RMI(Remote Method Invocation)为远程方法调用,是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法. 这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中. Java RMI:Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口.它使客户机上运行的程序