枚举类型

C语言学习之枚举类型 前言 枚举(enum)类型是计算机编程语言中的一种数据类型。枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的... 阅读详情
Enum 作为Sun全新引进的一个关键字,看起来很象是特殊的class,  它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。     当我们在声明一个enum类型时,我们应该注意到enum类型有如下的一些特征。  
1. 它不能有public的构造函数 ,这样做可以保证客户代码没有办法新建一个enum的实例。  
2. 所有枚举值都是public,static ,final的 。注意这一点只是针对于枚举值,我们可以和在普通类里面定义 变量一样定义其它任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。   
3 . Enum默认实现了java.lang.Comparable接口。  
4. Enum覆载了toString方法 ,因此我们如果调用Color.Blue.toString()默认返回字符串”Blue”.  
5. Enum提供了一个valueOf方法,这个方法和toString方法是相对应的。 调用valueOf(“Blue”)将返回 Color.Blue.因此我们在自己重写toString方法的时候就要注意到这一点,一般 来说应该相对应地重写valueOf方法。  
6. Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值 。  
7. Enum还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定,这里Color.Red.ordinal()返回0。  
注意 1:至于Enum的枚举常量的位置(序数)可以用Enum的ordinal()方法得到。

 了解了这些基本特性,我们来看看如何使用它们。  

1. 遍历所有有枚举值 .   知道了有values方法,我们可以轻车熟路地用ForEach循环来遍历了枚举值了。  
  for   (Color   c:   Color.values())  
  System.out.println(“find   value:”   +   c);  
2. 在enum中定义方法和变量 ,比如我们可以为Color增加一个方法随机返回一个颜色。  
   public  enum   Color  {  
      Red,  
      Green,  
      Blue;  
      /**
      * 定义一个变量表示枚举值的数目。  
      * (我有点奇怪为什么sun没有给enum直接提供一个size方法).  
      */  

       private   static   int    number   =   Color.values().length;  
      /**  
      *   随机返回一个枚举值  
      *   @return   a   random   enum   value.  
      */  

   public static  Color  getRandomColor () {
       long    random = System.currentTimeMillis() % number;
       switch  ((int) random) {  
       case  0:  
           return    Color.Red;  
       case    1:  
           return    Color.Green;  
       case    2:  
           return    Color.Blue;  

      default  :   

          return   Color.Red;  

      }  
  }  
  }  
  可以看出这在枚举类型里定义变量和方法和在普通类里面定义方法和变量没有什么区别。
  唯一要注意的只是变量和方法定义必须放在所有枚举值定义的后面,否则编译器会给出一个错误。  
3. 覆载(Override)toString,   valueOf方法   
  前面我们已经知道enum提供了toString,valueOf等方法,很多时候我们都需要覆载默认的toString方法,那么对于enum我们怎么做呢。
  其实这和覆载一个普通class的toString方法没有什么区别。  
  ….  
   public    String    toString (){  
  
switch    (this){  
  case   Red:  
   return   "Color.Red ";  
  case   Green:  
   return   "Color.Green ";  
  case   Blue:  
   return   "Color.Blue ";  
  default:  
   return   "Unknow   Color ";  
  }  
  }  

  ….  
  这时我们可以看到,此时再用前面的遍历代码打印出来的是  
  Color.Red  
  Color.Green  
  Color.Blue  

  而不是  
  Red  
  Green  
  Blue.
  
  可以看到toString确实是被覆载了。一般来说在覆载toString的时候我们同时也应该覆载valueOf方法,以保持它们相互的一致性。  
4. 使用构造函数  
   虽然enum不可以有public的构造函数,但是我们还是可以定义private的构造函数,
  在enum内部使用。还是用Color这个例子。  
   public     enum     Color    {  
  Red( "This   is   Red "),  
  Green( "This   is   Green "),  
  Blue( "This   is   Blue ");  
  
private    String   desc;  
  
Color (String   desc){  
  
this.desc   =   desc;  
  }  
   public   String    getDesc(){  
   return    this.desc;  
  }  
  }  
  这里我们为每一个颜色提供了一个说明信息,   然后定义了一个构造函数接受这个说明信息。  
  要注意这里构造函数不能为public或者protected,从而保证构造函数只能在内部使用,客户代码不能new一个枚举值的实例出来。
  这也是完全符合情理的,因为我们知道枚举值是public   static   final的常量而已。  
5. 实现特定的接口   
  我们已经知道enum可以定义变量和方法,它要实现一个接口也和普通class实现一个接口一样,这里就不作示例了。  
6. 定义枚举值自己的方法。   
  前面我们看到可以为enum定义一些方法,其实我们甚至可以为每一个枚举值定义方法。
这样,我们前面覆载toString的例子可以被改写成这样。  
   public     enum     Color    {  
  Red   {  
 
 public    String   toString(){  
   
return    "Color.Red ";  
  }  
  },  
  Green   {  
  
public    String   toString(){  
   
return    "Color.Green ";  
  }  
  },  
  Blue{  
  
public    String   toString(){  
  
 return    "Color.Blue ";  
  }  
  };  
  }  

  从逻辑上来说这样比原先提供一个“全局“的toString方法要清晰一些。  
  总的来说,enum作为一个全新定义的类型,是希望能够帮助程序员写出的代码更加简单易懂,
  个人觉得一般也不需要过多的使用enum的一些高级特性,否则就和简单易懂的初衷想违背了。 
实例1 :
  public class  Test  {
 
  /**
   * @param args
   */

   public static void  main(String[] args) {
   Student name=Student.ROBIN;
   System.out.println("name:"+name);
    for (Student st:Student.values())
    System.out.println(st.name);
  }
 }
  enum     Student
 {
  ROBIN("robin"),
  HARRY("harry",40),
  ROBBIE("robbie");

   String  name;
   int  age;
   private  Student(String name)
  {
    this (name,0);
  }
   private  Student(String name,int age)
  {
   this.name=name;
   this.age=age;

  }

 }

转自:http://blog.youkuaiyun.com/hudashi/article/details/6936978

枚举类型enum——systemverilog enum的基础语法 enum提供方法来描述抽象变量的合法值范围,其每个值都需要提供一个用户自定义的名字 enum{red,green.blue} RGB; // RGB是一个枚举类型变量 // red,green.blue是枚举常量 枚举数据默认(缺省类型)的存储类型为int型(32位有符号二值逻辑),且数值从0开始递增 。 枚举类型也可以直接赋初值 enum logic [2:0] {WAITE = 3'b001,LOAD = 3'b010,READY = 3'b100} state_t; 枚举类 阅读详情

相关推荐

JDK 1.5新特性---枚举类型

  Enum是Sun全新引进的一个关键字,看起来很象是特殊的class,它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。在声明一个enum类型时,应该注意到enum类型有如下的一些特征:

enum ordinal_Java Enum ordinal()方法与示例

enum ordinal 枚举类ordinal()方法 (Enum Class ordinal() method) ordinal() method is available in java.lang package. ordinal()方法在java.lang包中可用。 ordinal() method is used to return the position of this enum co...

cumubi7552的博客 4415

开源CC6920差分霍尔电流传感器模块实战指南——从选型到波形分析

本文详细介绍了CC6920差分霍尔电流传感器模块的选型、硬件连接、参数计算及波形分析技巧。通过实战案例,展示了该开源硬件在电流测量中的优势,包括超低内阻、电气隔离和抗干扰能力,适用于电机控制、开关电源保护等场景。

weixin_28738397的博客 376

Java枚举类型 enum

定义 An enum type is a special data type that enables for a variable to be a set of predefined constants. The variable must be equal to one of the values that have been predefined for it. 枚举类型是一...

MengW9的博客 563

SAR成像处理基本知识2——图像尺寸与回波尺寸的关系

阅读本文前,请先了解上一篇文章(SAR成像处理基本知识1——常用专用名词解释) 1. SAR图像尺寸预估方法 以C波段2m@20km的SAR图像为例,假设天线中心下视角为35° ,说明图像尺寸的估计方法。 1.1 距离向尺寸估计 地距分辨率为2m时,距离向分辨率约为1.15m,则要求信号带宽不小于130MHz,假设信号带宽为150MHz,采样率为180MHz,那么距离向分辨单元为0.833m。 地距幅宽为20km时,距离向幅宽约为20*sind(3...

爱学习的小伟的博客 4954

Unity 实现动态网格地图生成与交互组件

本文详细介绍了在Unity中实现动态网格地图生成与交互组件的完整方案。从基础网格单元实现到高级交互功能,涵盖网格生成器核心逻辑、事件驱动架构、性能优化技巧以及六边形网格等特殊实现。特别适合游戏开发者学习如何构建战棋、模拟经营类游戏的可交互地图系统,提升开发效率与用户体验。

weixin_29015483的博客 1068

C语言详解 - 枚举类型

注:以下全部代码的执行环境为VC++ 6.0 在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是: #define MON  1 #define TUE   2 #define WED  3 #define THU   4 #define FRI    5 #define SAT   6 #define SUN   7  ...

weixin_34320159的博客 4249

【RandLA-Net实战】从零构建隧道点云数据集并训练大场景语义分割模型

本文详细介绍了如何使用RandLA-Net构建隧道点云数据集并进行大场景语义分割模型训练。从数据采集、标注到模型训练与优化,提供了完整的实战指南,特别针对隧道场景的特殊挑战提出了解决方案。通过实际案例展示了RandLA-Net在处理大场景点云数据时的高效性和准确性,为隧道巡检等工程应用提供了可靠的技术支持。

weixin_30485379的博客 113

枚举类型是什么

C语言详解 - 枚举类型注:以下全部代码的执行环境为VC++ 6.0在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是:#define MON  1#define TUE   2#define WED  3#define THU   4#define FRI    5#define SAT   6#define SUN   7 在此,我们定...

4559的博客 3万+

OpenHarmony v4.1 Release设置应用随系统自动启动

OpenHarmony 4.1 版本中的 Ability Manager Service (AMS) 提供了应用自启动管理功能,允许系统控制哪些应用可以在系统启动时自动运行。这需要以下两个主要步骤:启用系统的自启动管理支持开发一个系统应用来管理自启动配置。

afufufufu的博客 1899

淘宝抓包,直达函数内部request请求体和response响应体, 告别FD, Charles,SSL,justtrustme 等http代理,证书工具。

淘宝抓包,hook发包函数,直接获取response相应数据

binary66的博客 4470

【Java】枚举类型

枚举类型是一种特殊的数据类型,用于定义一组固定的命名常量。枚举类型提供了一种更强大、更安全和更易读的方式来表示一组相关的常量。在Java中,枚举类型是通过使用enum关键字来定义的。枚举类型可以包含一个或多个枚举常量,每个常量都是枚举类型的实例。枚举常量是在枚举类型中预先定义的,它们是唯一的、已命名的对象。

qq_61635026的博客 2万+

要理解成本中心与利润中心的根本区别与适用场景,需从 “责任范围、考核核心、管理目标” 三个核心维度切入,同时明确二者在企业管理体系中的联动关系

摘要: 成本中心与利润核心区别在于责任范围、考核目标和管理权限。成本中心仅对成本负责(如生产、行政部门),考核成本控制能力;利润中心需同时管控成本与收入(如独立产品线、区域分公司),以利润为核心指标。选择标准取决于单元是否拥有收入决策权:无收入权的支持/执行部门设为成本中心,能独立经营、核算盈亏的单元设为利润中心。二者协同运作,成本中心为利润中心提供基础支持,利润中心的需求动态影响成本中心资源配置,共同实现企业整体目标。划分本质是确保考核指标与责任范围匹配,避免管理失效。

金牌架构师 656

C++枚举类型

只要enum有名字,我们就能定义并初始化该类型的成员。要想初始化enum对象或者为enum对象赋值,必须使用该类型的一个枚举成员或者该类型的另一个对象,//正确一个不限定作用城的枚举类型的对象或枚举成员自动地转换成整型,限定作用域的枚举类型不会进行隐式转换int a1 = a;//可以//不可以,限定作用域的枚举类型不会进行隐式转换。

2301_80224556的博客 2709

PCL 法线定向【2025最新版】

几种法线定向方法的PCL代码实现。

点云侠的博客 2804

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C++ 之枚举类型

在 C++ 中,如果一个变量的可能取值为有限个时,你可以使用枚举类型对该变量进行声明。枚举类型是枚举常量的集合,枚举常量即是使用该枚举类型声明的枚举变量所能取得的值。枚举类型并不能为你提供太多的帮助,但能有效地提高程序的可读性及可靠性(安全性)。

两个月亮 4405

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

枚举类型enum用法

枚举常量是枚举类型中的值,即枚举值。 枚举类型是一种用户定义的类型,只有用户在程序中定义它后才能被使用。用户通常利用枚举类型定义程序中需要使用的一组相关的符号常量。枚举类型的定义格式为: enum <枚举类型名> {<枚举表>}; 它是一条枚举类型定义语句,该语句以enum保留字开始,接着为枚举类型名,它是用户命名的一个标识符,以后就直接使用它表示该类型,枚举类型名后为该类型的定义体,它是由一对花括号和其中的枚举表所组成,枚举表为一组用逗号分开的由用户命名的符号常量,每个

mindboycsdn的博客 5559

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【SV】枚举类型

1.1. 用户自定义类型(typedef) 局部typedef定义:只用于设计的特定部分时,typedef的定义可在module或interface中 共享typedef定义:当在多个模型中使用时,typedef的定义可在包中进行,module,interface,program block可以通过导入packet子项来使用typedef定义 例如: package chip_types; `ifdef TWO_STATE typedef bit dtype_t; //当宏定义TWO_STATE时

lbt_dvshare的博客 8554

Enum 枚举类型

** Enum 枚举类型-C语言 ** 1.简介 enum是C语言中的一个关键字,enum叫枚举数据类型,枚举数据类型描述的是一组整型值的集合(这句话其实不太妥当),枚举型是预处理指令#define的替代,枚举和宏其实非常类似,宏在预处理阶段将名字替换成对应的值,枚举在编译阶段将名字替换成对应的值, 我们可以将枚举理解为编译阶段的宏,使用格式: enum typeName{ valueName1, valueName2, valueName3, ...... }; typeName是枚举类型的名字,花括号

Holiday_ZhuYe的博客 2818

枚举类型简单理解

枚举   枚举类型声明为一组相关的符号常数定义了一个类型名称。枚举用于“多项选择”场合,就是程序运行时从编译时已经设定的固定数目的“选择”中做出决定。   枚举类型(也称为枚举)为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。例如,假设您必须定义一个变量,该变量的值表示一周中的一天。该变量只能存储七个有意义的值。若要定义这些值,可以使用枚举类型。枚举类型是使用 enum 关键字声明的...

ZhangJiqun&191cm&85kg 4015

C++ 枚举类型详解

枚举类型的定义 枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。 定义格式:枚举类型的定义格式为:     enum {}; 其中: 关键字enum——指明其后的标识符是一个枚举类型的名字。 枚举常量表——由枚举常量构成。“枚举常量”或称“枚举成员”,是以标识符形式表示的整型量,表示枚举类型的取值。枚举常量表列出枚举类型的所有取

yukgwy60648的博客 7508

Java--枚举类型(枚举类型介绍 & 定义枚举类型 & 枚举类型的使用 & 枚举类型的注意事项 & 遍历枚举项)

1. 枚举类型 1.1 大量使用常量来表示数据存在以下问题: 示例: public static final String WEI_XIN = "weixin"; public static final String WEI_XIN_URL = "https://weixin.qq.com/"; public static final String ZHI_FU_BAO = "zhifubao"; public static final String ZHI_FU_BA

天行健 君子以自强不息,地势坤 君子以厚德载物。 2461
上一篇: java.util.concurrent.TimeUnit
下一篇: android异步 比较
HabbyGe
博客等级 码龄16年 46粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值