Java枚举

Java枚举是一个特殊的类,常用来表示一组常量,像季节、星期、月份。用enum关键字来定义,各个变量之间用逗号来分隔。也可以自定义类实现枚举。

枚举常量一般要大写。

方式一 使用enum关键字

public class Enum_01 {
    public static void main(String[] args) {
        Color c1 = Color.green;
        System.out.println(c1);
    }
}

enum Color{
    red,blue,green,blank
}
green

Process finished with exit code 0

枚举也可以声明在内部类中

public class Enum_02 {
    public static void main(String[] args) {
        Color c1 = Color.RED;
        System.out.println(c1);
    }
    public enum Color{
        RED,GREEN,BLUE
    }
}

可以使用增强for循环来遍历枚举元素。

public class Enum_03 {
    public static void main(String[] args) {
        for (Date myDate : Date.values()){
            System.out.println(myDate);
        }
    }
}

enum Date{
    Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
}
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

Process finished with exit code 0
public class Enum_03 {
    public static void main(String[] args) {
        for (Date myDate : Date.values()){
            System.out.println(myDate + "at index " +myDate.ordinal());
        }
    }
}

enum Date{
    Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
}
Mondayat index 0
Tuesdayat index 1
Wednesdayat index 2
Thursdayat index 3
Fridayat index 4
Saturdayat index 5
Sundayat index 6

Process finished with exit code 0
public class Enum_02 {
    public static void main(String[] args) {
        Color c1 = Color.RED;
        System.out.println(c1);
    }
    public enum Color{
        //注意中间用逗号隔开,并且要求将常量对象放在最前面。
        RED("red","123"),GREEN("green","456");
        private String color;
        private String number;

        Color(String color, String number) {
            this.color = color;
            this.number = number;
        }

        @Override
        public String toString() {
            return "Color{" +
                    "color='" + color + '\'' +
                    ", number='" + number + '\'' +
                    '}';
        }
    }
}
Color{color='red', number='123'}

Process finished with exit code 0

方式二 自定义类实现枚举

/**
 * @auther
 */
public class Enum_04 {
    public static void main(String[] args) {
        System.out.println(Season.AUTUMN);
    }
}
 class Season{
    //1、将构造器私有化 目的是防止直接new
    // 2、去掉set相关的方法 只能读,不能修改
     //3、在Season类内部,创建固定的对象
     //4、可以加入final修饰符
    private String name;
    private String desc;

     public final static Season SPRING = new Season("春天","温暖");
     public final static Season SUMMER = new Season("夏天","炎热");
     public final static Season AUTUMN = new Season("秋天","凉爽");
     public final static Season WINTER = new Season("冬天","寒冷");
    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

     @Override
     public String toString() {
         return "Season{" +
                 "name='" + name + '\'' +
                 ", desc='" + desc + '\'' +
                 '}';
     }
 }

Season{name='秋天', desc='凉爽'}

Process finished with exit code 0

PS : 补充
由Java文件 javac编译成class文件。由class文件 通过javap反编译成Java文件。

枚举常用方法

values() 返回枚举类中所有的值。
ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。
valueOf()方法返回指定字符串值的枚举常量

public class Enum_02 {
    public static void main(String[] args) {
    Season autumn = Season.AUTUMN;
        //输出枚举对象的名字
        System.out.println(autumn.name());
        //输出的是该枚举对象的次序,从0开始编号
        System.out.println(autumn.ordinal()  );
        //values返回一个数组 含有所有枚举对象 使用增强for循环实现
        for (Season season:Season.values()){
            System.out.println(season);
        }
        //valueOf是将字符串转换成枚举对象
        Season s1 = Season.valueOf("AUTUMN");
        System.out.println(s1);
        //compareTo比较两个枚举常量 比较的是编号 用前一个的编号减去后面一个的编号 0-1=-1
        System.out.println(Season.SPRING.compareTo(Season.SUMMER));
    }
    public enum Season{
        //注意中间用逗号隔开,并且要求将常量对象放在最前面。
        SPRING("春天","温暖"),SUMMER("夏天","炎热"),AUTUMN("秋天","凉爽"),WINTER("冬天","寒冷");
        private String season;
        private String desc;

        Season (String season, String desc) {
            this.season = season;
            this.desc = desc;
        }

        @Override
        public String toString() {
            return "Season{" +
                    "season='" + season + '\'' +
                    ", desc='" + desc + '\'' +
                    '}';
        }
    }
}

AUTUMN
2
Season{season='春天', desc='温暖'}
Season{season='夏天', desc='炎热'}
Season{season='秋天', desc='凉爽'}
Season{season='冬天', desc='寒冷'}
Season{season='秋天', desc='凉爽'}
-1

Process finished with exit code 0

注意:使用enum关键字后,就不能再继承其他的类了,因为会隐式继承Enum类,但是还是可以实现接口的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值