为了账号安全,请及时绑定邮箱和手机立即绑定

【Java】关于枚举类型遍历的问题

【Java】关于枚举类型遍历的问题

慕莱坞森 2019-03-01 10:49:50
最近在学习Java,遇到了枚举类型(enum),遇到了一些问题。根据网上的一些大神文章,基本了解枚举,但是还是有些问题没有解决: 枚举类型的初始化是什么样的,或者说它能像其他类一样初始化吗? 如:Color color = ........;//Color为一个枚举类型,可以用这样类似的方式初始化吗? 关于遍历 for(Color color :Color.values()){.......} //本人已经知道上述的例子中,括号中的句子实现的是返回一个数组的功能,但是不理解这个“:”号是什么意思,为什么要声明一个枚举类型变量?
查看完整描述

1 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

第一个问题:

首先要明确通常是用枚举类型来描述一组常量。

枚举类型是不可以实例化的。问题中描述的 Color color = ........; 初始化方式显然是不可以的。而枚举初始化则经常讨论的是枚举内部静态成员的初始化。

第二个问题:

所谓的“:”,其实只是Java增强for循环一个语法糖。

public enum Color {

    RED(0), BLACK(1);

    private int value;

    Color(int value) {
        this.value = value;
    }

    public static void main(String[] args) {
        for (Color color : Color.values()) {
            System.out.println(color.value);
        }
    }
}

编译之后的.Class文件如下:

public enum Color {
    RED(0),
    BLACK(1);

    private int value;

    private Color(int var3) {
        this.value = var3;
    }

    public static void main(String[] var0) {
        Color[] var1 = values();
        int var2 = var1.length;

        for(int var3 = 0; var3 < var2; ++var3) {
            Color var4 = var1[var3];
            System.out.println(var4.value);
        }
    }
}

从编译后的代码中可以看出,“:”形式的循环,本质上和一般循环或者遍历没有区别。

查看完整回答
反对 回复 2019-03-01
  • 1 回答
  • 0 关注
  • 489 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号