精华内容
下载资源
问答
  • 图控大叔构图传递思想阅读从未如此简单!!!01前言 对于C语言里面的枚举...02干货枚举类型关键字:enum数据类型:整型(int)所占内存:4字节(32位)定义说明:1、第一个枚举元素值在不赋值情况下,默认为0。2、已经...
    8e3a3d8839c0d6fc85ef3f8c00be1944.png

    图控大叔

    构图传递思想

    阅读从未如此简单!!!

    01

    前言

           对于C语言里面的枚举类型,小编以前有听过,好像也用过,但是对于这块内容还是有一点点模糊。所以,今天想将枚举类型的相关知识点整理出来,内容如有不足或者存在纰漏,希望读者后台留言。

    02

    干货

     枚举类型

    关键字:enum

    数据类型:整型(int)

    所占内存:4字节(32位)

    定义说明:

    1、第一个枚举元素值在不赋值情况下,默认为0。 

    2、已经赋值的枚举元素,如果后面还有枚举元素未进行赋值,则默认在此基础上加一。但是,如果后面的枚举元素有进行赋值的情况下,则需要做其他说明。

    使用场合:

    当一个变量只有几种可能的值。

    作用:

    1、简单的连续打印

    2、用作函数返回错误码(重点)

    03

    代码:定义与声明

    方式一:类型定义与变量声明分开

    enum num
          {
            a,b,c,d,e,f,g
            //最后一个枚举元素后面无需加';',但是花括号需要
          };
    enum num N1;
    enum num N2;

    方式二:类型定义与变量声明一起

    //第一种情况,包含标识符num
    enum num
          {
            a,b,c,d,e,f,g
          }N1;
    //第二种情况,忽略标识符num
    enum 
          {
            a,b,c,d,e,f,g
          }N1;

    方式三:类型定义、变量声明与typedef

    #include
    typedef enum my_num_test
          {
            a,b,c,d,e,f,g
          }num;
    //此处的num为枚举型enum my_num_test的别名

    num N1;
    num N2;
    int main(int argc,const char **argv){
      N1 = g;
      printf("%d\n",N1);

      return 0;
    }
    /*
    程序输出为:
    6
    */

    错误情况说明

    1、存在同名的枚举类型变量(相同作用域情况下)

    #include

    enum num_1
    {
      a,b,c
    }N1;

    enum num_2
    {
      d,e,f,g
    }N1;

    int main(int argc,const char **argv){
      return 0;
    }
    /*
    报错提示:
    11:2: error: conflicting types for ‘N1’
    6:2: note: previous declaration of ‘N1’ was here
    */

    2、存在同名的枚举元素(相同作用域情况下)

    #include

    enum num_1
    {
      a,b,c
    }N1;

    enum num_2
    {
      a,b,c
    }N2;

    int main(int argc,const char **argv){
      return 0;
    }
    /*
    报错提示:
    10:2: error: redeclaration of enumerator ‘a’
    5:2: note: previous definition of ‘a’ was here
    10:4: error: redeclaration of enumerator ‘b’
    5:4: note: previous definition of ‘b’ was here
    10:6: error: redeclaration of enumerator ‘c’
    5:6: note: previous definition of ‘c’ was here
    */

           看到这里,你可能会想,如果是不同的作用域,那么同名可不可以呢?答案是可以的,但是小编想说,这样子不好,别给自己挖坑好吗?以下是不同作用域的程序代码

    #include

    enum num_1
    {
      a,b,c
    }N1;

    int main(int argc,const char **argv){
      
      enum num_1
      {
        a,b,c
      }N1;

      return 0;
    }
    /*
    此时枚举类型名、枚举元素、枚举变量名都一样,
    但是程序没有报错,但是小
    编希望你不要瞎折腾
    */

    04

    代码:枚举元素值打印

    #include

    enum num
    {
      a,b=10,c
    };

    int main(int argc,const char **argv){
      enum num N1;
      
      N1 = a;
      printf("%d\n",N1);
      N1 = b;
      printf("%d\n",N1);
      N1 = c;
      printf("%d\n",N1);
      
      return 0;
    }
    /*
    程序输出:
    0
    10
    11
    */

    05

    代码:字节占用打印

    #include

    enum num
    {
      a,b,c
    };

    int main(int argc,const char **argv){
      enum num N1;
      
      printf("%d\n",sizeof(enum num));//此处需加关键字
      
      printf("%d\n",sizeof(N1));
      
      printf("%d\n",sizeof(a));
      return 0;
    }
    /*
    程序输出:
    4
    4
    4
    */

    06

    问题讨论

    1、枚举元素能否二次赋值?

    答案:不能

    #include

    enum num
    {
      a,b,c
    };

    int main(int argc,const char **argv){
        enum num N1;

        a = 10;//二次赋值
          
        N1 = a;
        printf("%d\n",N1);
      
        return 0;
    }
    /*
    程序报错:
    In function ‘main’:
    12:5: error: lvalue required as left operand of assignment
    */

    2、枚举元素能否遍历打印?

    答案:简单可以,复杂不行,因为会乱

    #include

    enum num
    {
      a,b,c,d,f
    };

    /*
    遍历打印:
    简单版
    */


    int main(int argc,const char **argv){
        enum num N1;

        for(N1 = a;N1<=f;N1++)
        {
          printf("%d\n",N1);
        }

        return 0;
    }
    /*
    程序输出:
    0
    1
    2
    3
    4
    */
    #include

    enum num
    {
      a,b,c,d=8,f
    };

    /*
    遍历打印:
    复杂版
    */


    int main(int argc,const char **argv){
        enum num N1;

        for(N1 = a;N1<=f;N1++)
        {
          printf("%d\n",N1);
        }

        return 0;
    }
    /*
    程序输出:
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    */

    3、什么是匿名枚举?(重点)

           仅定义枚举类型但是没有声明枚举变量,但是其枚举元素仍可以在算术表达式中使用,代码如下:

    #include

    enum 
    {
      one=1,
      two=2,
      three=3,
      four=4
    };
    /*
    匿名枚举示例
    */

    int main(int argc,const char **argv){
        int i = 10;
        
        printf("%d\n",i);
        
        i = i + three;
        
        printf("%d\n",i);

        return 0;
    }
    /*
    程序输出:
    10
    13
    */

    07

    拓展

    1、枚举类型和宏定义的区别?

    2、编译器对于枚举类型和宏定义的处理是否一致?

    (像老师一样留两个问题,嘿嘿!)

    08

    结尾

           本次关于C语言中枚举类型的补充总结到这里就结束了,后期如果需要补充,再发!哈哈哈e2e048973afef44bc62e9f313fc745ba.png

          《图控大叔》,与你一起进步!

    展开全文
  • Java枚举教程我们已经了解了Java枚举详解语法[public] enum 枚举类型名称{枚举对象1,枚举对象2,枚举对象3...枚举对象n;}参数参数描述[public]可选字段,表示枚举范围enum定义枚举的关键字枚举类型名称和类名一样,...

    Java枚举教程

    我们已经了解了

    Java枚举详解

    语法

    [public] enum 枚举类型名称{

    枚举对象1,枚举对象2,枚举对象3...枚举对象n;

    }

    参数

    参数

    描述

    [public]

    可选字段,表示枚举范围

    enum

    定义枚举的关键字

    枚举类型名称

    和类名一样,枚举名

    枚举对象

    和类里面的属性类型,只不过是枚举对象

    说明

    枚举和 Java 语言的类和接口类似,熟练掌握了类的定义和接口的定义,就可以很好的掌握枚举的定义。

    案例

    定义一个颜色相关的枚举类

    package com.haicoder.net.enu;

    public enum Color {

    READ, BLUE, WRITE;

    }

    定义一个测试方法来遍历枚举

    package com.haicoder.net.enu;

    public class EnumTest{

    public static void main(String[] args){

    System.out.println("嗨客网(www.haicoder.net)");

    for (Color color : Color.values()) {

    System.out.println("枚举里面的元素有:" + color);

    }

    }

    }

    1250d6b02c2ecbc708dc6341c90baab3.png

    我们定义了一个表示颜色的枚举类,里面定义了一些颜色。在这个枚举里面,颜色在些范围的颜色才有效。然后通过枚举类的 values 方法获取这个枚举里面的所有元素,通过

    Java枚举类通用方法

    方法名称

    描述

    protected Enum(String name, int ordinal);

    构造函数,给声明的枚举赋值

    public final int compareTo(E o)

    对象比较

    public final boolean equals(Object object)

    比较两个枚举对象

    public final int hashCode()

    返回枚举长了的哈嘻码

    public final String name()

    返回此枚举名称

    public final int ordinal()

    返回枚举常量的序数

    案例

    package com.haicoder.net.enu;

    public class EnumTest{

    public static void main(String[] args){

    System.out.println("嗨客网(www.haicoder.net)");

    for (Color color : Color.values()) {

    System.out.println("枚举常量序数:" + color.ordinal() + " 枚举名称:" + color.name() + " 枚举值:" + color);

    }

    }

    }

    运行结果如下:

    33f50553c0c36e6ec8dd91b03092f91f.png

    我们还是以上面的 Color 枚举来做例子,将枚举里面的序号和名称遍历打印了出来。

    Java枚举对象赋值

    构造函数赋值

    定义一个测试枚举,里面有一个属性 calorDesc。然后通过构造函数进行赋值:

    package com.haicoder.net.enu;

    public enum Color {

    READ("红色"), BLUE("蓝色"), WRITE("白色");

    private String calorDesc;

    Color(String calorDesc) {

    this.calorDesc = calorDesc;

    }

    public String getCalorDesc(){

    return calorDesc;

    }

    public void setCalorDesc(String calorDesc){

    this.calorDesc = calorDesc;

    }

    }

    调用测试类:

    package com.haicoder.net.enu;

    public class EnumTest{

    public static void main(String[] args){

    System.out.println("嗨客网(www.haicoder.net)");

    for (Color color : Color.values()) {

    System.out.println("枚举常量序数:" + color.ordinal() + " 枚举名称:" + color.name() + " 枚举值:" + color + "自定义属性值:" + color.getCalorDesc());

    }

    }

    }

    运行结果如下:

    b6ef20ec053266cfc4bcd5d7b67bad79.png

    我们在枚举里面定义了自己的属性,calorDesc 然后通过构造函数方式进行赋值。在获取自定义的属性的时候从对应的枚举值里面获取就行了。

    SET方式赋值

    定义一个枚举类,里面没有构造方法,有一个 colrDesc 属性。

    package com.haicoder.net.enu;

    public enum Color {

    READ(), BLUE(), WRITE();

    private String calorDesc;

    public String getCalorDesc(){

    return calorDesc;

    }

    public void setCalorDesc(String calorDesc){

    this.calorDesc = calorDesc;

    }

    }

    定义一个测试类,使用 set 方式赋值

    package com.haicoder.net.enu;

    public class EnumTest{

    public static void main(String[] args){

    System.out.println("嗨客网(www.haicoder.net)");

    for (Color color : Color.values()) {

    if (color.name().equals("READ")) {

    color.setCalorDesc("红色");

    } else if (color.name().equals("BLUE")) {

    color.setCalorDesc("蓝色");

    } else if (color.name().equals("WRITE")) {

    color.setCalorDesc("白色");

    }

    }

    for (Color color : Color.values()) {

    System.out.println("枚举常量序数:" + color.ordinal() + " 枚举名称:" + color.name() + " 枚举值:" + color + "自定义属性值:" + color.getCalorDesc());

    }

    }

    }

    运行结果如下:

    ff8e927ef4ddd1a319ddc97e6aade10f.png

    在枚举类里面,我们没有设置构造函数,也没有对 colrDesc 进行赋值,在测试类里面,我们调用了枚举的 set 方法对相应的枚举对象进行赋值。

    Java枚举总结

    枚举是在类和接口的基础上新增加的一个类型。它可以将已经知道的数据穷举,它的作用是如果数据在这些穷举里面就正常,如果不在的话就异常。

    展开全文
  • javaenum并没那么智能,是从0开始自增的。可以维护一个static变量实现任意自增:import java.util.EnumSet;public class EnumTest {public static void main(String[] args) {for (MSG_TYPE msg_type : EnumSet....

    java中enum并没那么智能,是从0开始自增的。可以维护一个static变量实现任意自增:

    import java.util.EnumSet;

    public class EnumTest {

    public static void main(String[] args) {

    for (MSG_TYPE msg_type : EnumSet.allOf(MSG_TYPE.class))

    {

    System.out.println(msg_type.name() + " " +

    msg_type.ordinal() + " " +

    msg_type.getValue());

    }

    }

    }

    enum MSG_TYPE {

    MSG_LOGIN(500),

    MSG_LOGOUT,

    MSG_REGISTER,

    MSG_SEARCH,

    MSG_ADD(600);

    private int value;

    private static int nextValue;

    MSG_TYPE(){

    this(Counter.nextValue);

    }

    MSG_TYPE(int value){

    this.value = value;

    Counter.nextValue = value + 1;

    }

    public int getValue()

    {

    return value;

    }

    private static class Counter

    {

    private static int nextValue = 0;

    }

    }

    结果:

    MSG_LOGIN 0 500

    MSG_LOGOUT 1 501

    MSG_REGISTER 2 502

    MSG_SEARCH 3 503

    MSG_ADD 4 600

    展开全文
  • java enum枚举类型 之 括号赋值

    千次阅读 2017-08-25 18:13:44
    要注意的是: 通过括号赋值,而且必须带有一个参构造器和一个属性跟方法,否则编译出错 ...按照详解,我自己写的枚举 public enum QuestionType { SINGLECHOICE(2), MULTIPLECHOICE(3), MATRIXSINGLEC

    要注意的是:

    1. 通过括号赋值,而且必须带有一个参构造器和一个属性跟方法,否则编译出错
    2. 赋值必须都赋值或都不赋值,不能一部分赋值一部分不赋值;如果不赋值则不能写构造器,赋值编译也出错
      按照详解,我自己写的枚举
    public enum QuestionType {
        SINGLECHOICE(2), 
        MULTIPLECHOICE(3), 
        MATRIXSINGLECHOICE(4), 
        MATRIXMULTIPLECHOICE(5), 
        BLANK(6), 
        MATRIXSCORING(7), 
        SCORING(50), 
        SORTING(60), 
        DESCRIPTION(70), 
        MATRIXBLANK(100), 
        MATRIXCOMBINATION(110);
    
        private final int value;
    
        // 构造器默认也只能是private, 从而保证构造函数只能在内部使用
        QuestionType(int value) {
            this.value = value;
        }
    
        public int getValue() {
            return value;
        }
    }

    详解如下:
    [http://www.cnblogs.com/linjiqin/archive/2011/02/11/1951632.html]

    展开全文
  • Java中,被 enum关键字修饰的类型就是枚举类型。形式如下:enum Color { RED, GREEN, BLUE }如果枚举不添加任何方法,枚举值默认为从0开始的有序数值。以 Color 枚举类型举例,它的枚举常量依次为RED:0,GREEN:1...
  • 可以将这些装备标记为:1、2、3 但是这种情况,我们在给变量赋值的有时候赋值为错误的值比如:0 或者true这时候就出现枚举数据类型枚举包含有限个命名:public enum Size { 上线,下线,报废 }对于枚举在文档中...
  • java 枚举 Enum

    2011-08-24 14:43:09
    > 自定义的枚举类,都默认 实现 了 java.lang.Enum > 枚举类的构造器只能用private 修饰,写或不写 修饰符,都为private > 可以含有属性和方法 > final 常量属性,它的赋值要么在构造函数里,要么在枚举元素声明中 ...
  • Java 枚举类型的基本想法非常简单: 这些类通过共有的静态final域为每个枚举常量导出一个实例。枚举类型没有可以访问的构造器,所以它是真的final类。客户端不能创建枚举类型的实例,也不能对它进行扩展,因此不存...
  • 枚举其实就是一种类型,跟int, char 这种差不多,就是定义变量时限制输入的,你只能够赋enum里面规定的值。定义枚举 方法很简单,就跟定义一个类一样,只是把class换成 enum,其他的,你懂地。e.g:public enum ...
  • Java枚举赋值字符类型

    千次阅读 2013-05-16 09:02:18
    public enum MessageType { SUCCESS("0"),//表示成功 USER_NOT_FOUND_Password_Param_Illegal("-1");//参数不合法, 用户名不存在,密码错误 private final String value; private MessageType(String value...
  • 枚举java5后新增加的特性,是一种特殊的数据类型,特殊是因为枚举是一种类(class)类型,但是比class类型多了一些约束,下面就看看什么是枚举枚举的定义和使用。 在java5以前经常使用常量类来统一定义常量如下...
  • JAVA枚举赋值

    2018-09-20 10:30:00
    /*媒体类型*/ public enum MediaType { html(0), video(1), audio(2);private final int value; MediaType(int value) { this.value = value; } public int getValue() {...
  • java枚举类型

    2017-10-17 14:24:00
    一: 有时候变量的取值是在有限的集合内,比如说服务器...这时候就出现枚举数据类型枚举包含有限个命名: public enum Size { 上线,下线,报废 } 对于枚举在文档中解释:http://www.xyzws.com/Javafaq/what-c...
  • java 枚举类型分析

    2014-10-11 10:17:00
    最近做android开发,需要用到枚举值,这样可以连续赋值,我按之前c++那样书写,如下所示: public enum ColorSelect { RED_BAGE = 0, GREEN_BAGE, BLUE_BAGE; } 编译不过。 我将赋值语句修改了以后,...
  • Java枚举类型如何实现类似C++的自增赋值? 在C++中可以这么写: enum MSG_TYPE { MSG_LOGIN = 500, MSG_LOGOUT, MSG_REGISTER, MSG_SEARCH, /* ... */ }; 但是在Java中就必须写一大坨,必须依次给每个枚举...
  • Java枚举类型

    2020-09-27 12:35:45
    java枚举类型基础讲解视频 关键字:enum 为什么要用 如果不用的话,要定义多个变量的时候,需要这么写 int n1=1; int n2=2; int n3=3; int n4=4; 用了之后这么写即可 enum en{ n1, n2, n3, n4 } enum内的元素...
  • 枚举类型就是让你命名有规律的变量更加省心; 按顺序进行 一 一 的赋值; 代码: #include&lt;stdio.h&gt;   enum DAY {  MON=1, TUE, WED, THU, FRI, SAT, SUN };   int main() {  enum DAY day;  ...
  • 自己关于枚举的理解 枚举的意思是Java自动给按照枚举值出现的顺序赋值,注意是从0...public class 枚举类型 { public enum Week{ Sun,Mon,Tue,Wed,Thu,Fri,Sat }; /*枚举的英文是enumerate所以Java里的枚举是缩写e
  • Java2-5 枚举类型

    2020-11-29 13:29:18
    枚举类型—一种新的数据类型 枚举类型声明常量列表: enum 枚举名 { } 枚举类型声明变量 枚举名 变量 package d; import java.util.Scanner; enum Season{ 春季,夏季,秋季,冬季 }//枚举类型的常量列表 ...
  • Java枚举的本质原理是通过普通类来实现的,只是编译器为我们做了加工处理,每个枚举类型编译后的字节码实质都是继承自java.lang.Enum枚举类型同名普通类,每个枚举变量实质是一个与枚举类型同名普通类的静态常量...
  • 枚举 枚举简单的说就是将需要的常量值一个一个的列举出来,并封装成一个整体。 语法格式:[public] enum 枚举名{ //值列表 } ... * 创建枚举类型的Week 注意:这里创建的是枚举,即数据类型是en...
  • 枚举 枚举简单的说就是将需要的常量值一个一个的列举出来,并封装成一个整体。 语法格式:[public] enum 枚举名{ //值列表 } 声明格式:枚举名 变量名;... * 创建枚举类型的Week 注意:这里创建的是枚举,即数据类
  • Java枚举学习

    2018-06-09 11:36:49
    * enum:凡是使用enum修饰的都为枚举 属性的集合 进行一一成列出来 * 枚举中的变量全部都是常量 * 为什么要定义枚举? * 因为定义属性需要确定类型,定义枚举不需要定义类型 默认为常量 * * 首先定义枚举一定...
  • JavaEnum

    2020-02-19 11:17:01
    已经知道使用 eunm 关键字可以定义一个枚举,该关键字表示的是 java.lang.Enum类型,即使用 enum 声明的枚举类型就相当于定义一个类,此类默认继承 java.lang.Enum 类。 java.lang.Enum 的定...
  • java枚举常用场景小结

    2019-05-12 10:57:43
    Java中的枚举类型,方便用来表示一组相关常量,如星期,季节,颜色等。 二、举例 将快递公司定义为一个枚举类型  //利用构造函数将变量赋值,然后通过get方法获取指定值  public enum CompanyEnum { SF(“顺丰速运...
  • 对于JAVA语言中的枚举类型,和C语言中的枚举类型,实现的方式是不一样的,在JAVA中是以类的形式实现。  下面我简单的介绍下枚举类型的用法(真的是超简单)。 枚举类型的定义和类的定义是很像的。如下: public ...

空空如也

空空如也

1 2 3 4 5
收藏数 87
精华内容 34
关键字:

java枚举类型enum赋值

java 订阅