Java 枚举(Enum)使用

文章目录

        • 枚举引入
        • enum关键字实现枚举
        • enum关键字实现枚举注意事项
        • enum常用方法一览表
        • enum课堂练习
        • enum实现接口

枚举引入

创建Season类, 实例化春夏秋冬四个实例

Season对象有如下特点
1.季节的值是有限的几个值(spring, summer, autumn, winter)
2.只读,不需要修改。

解决方案就是咱们即将提出的枚举

1)枚举对应英文(enumeration, 简写enum)
2)枚举是一组常量的集合。
3)可以这里理解:枚举属于一种特殊的类,里面只包含一组有限的特定的对象。

public class Enumeration {public static void main(String[] args) {System.out.println(Season.AUTUMN);}
}// 演示定义枚举类
class Season {// 1 构造器私有化防止直接new// 2 只保留get,去掉set,防止属性被修改// 3 在Season内部直接创建固定的对象// 4 还可以再优化,使用static对象会使Season类加载,所以再加个finalprivate String name;private String desc;public final static Season SPRING = new Season("春天", "温暖");public final static Season WINTER = new Season("冬天", "寒冷");public final static Season AUTUMN = new Season("秋天", "凉爽");public final static Season SUMMER = new Season("夏天", "炎热");private Season(String name, String desc) {this.name = name;this.desc = desc;}public String getName() {return name;}public String getDesc() {return desc;}@Overridepublic String toString() {return "Season{" +"name='" + name + '\'' +", desc='" + desc + '\'' +'}';}
}

1.不需要提供setXxx方法,因为枚举对象值通常为只读.
2.对枚举对象/属性使用final + static共同修饰,实现底层优化.
3.枚举对象名通常使用全部大写,常量的命名规范.
4.枚举对象根据需要,也可以有多个属性

enum关键字实现枚举

使用enum来实现前面的枚举案例,看老师演示,主要体会和自定义类实现枚举不同的地方。

package src.enum_;public class Enumeration01 {public static void main(String[] args) {System.out.println(Season.AUTUMN);}
}// 演示定义枚举类
enum Season1 {// 如果使用了enum来定义枚举类// 1 使用关键字enum来替代class// 2 常量名(实参列表)// 3 如果有多个常量对象,使用`,`间隔即可// 4 如果使用enum,要求常量对象放在类最前面SPRING("春天", "温暖"),SUMMER("夏天", "炎热"),AUTUMN("秋天", "凉爽"),WINTER("冬天", "寒冷");private String name;private String desc;private Season1(String name, String desc) {this.name = name;this.desc = desc;}public String getName() {return name;}public String getDesc() {return desc;}@Overridepublic String toString() {return "Season{" +"name='" + name + '\'' +", desc='" + desc + '\'' +'}';}
}
enum关键字实现枚举注意事项

1.当我们使用enum关键字开发一个枚举类时,默认会继承Enum类[如何证明]

image-20221117161958460

2.传统的public static final Season2 SPRING = new Season2(“春天”, “温暖”); 简化成SPRING(“春天”,“温暖”),这里必须知道,它调用的是哪个构造器.
3.如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略

image-20221117162304457

4.当有多个枚举对象时,使用,间隔,最后有一个分号;结尾
5.枚举对象必须放在枚举类的行首.

image-20221117162800643 image-20221117163000614
enum常用方法一览表

image-20221117170746055

  1. toString:Enum类已经重写过了,返回的是当前对象名子类可以重写该方法,用于返回对象的属性信息

  2. name:返回当前对象名(常量名) ,子类中不能重写

  3. ordinal:返回当前对象的位置号,默认从0开始

  4. values: 返回当前枚举类中所有的常量

  5. valueOf:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常!

  6. compareTo:比较两个枚举常量,比较的就是编号!

enum课堂练习

1)声明Week枚举类,其中包含星期一至星期日的定义; MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
2)使用values返回所有的枚举数组,并遍历,输出下图效果
image-20221117172150056

public class Enumerate02 {public static void main(String[] args) {Week[] weeks = Week.values();for (Week week : weeks) {System.out.println(week);}}
}enum Week {MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三"),THURSDAY("星期四"),FRIDAY("星期五"),SATURDAY("星期六"),SUNDAY("星期日");private String name;private Week(String name) {this.name = name;}@Overridepublic String toString() {return name;}
}
enum实现接口

1)使用enum关键字后,就不能再继承其它类了,因为enum会隐式继承Enum, 而Java是单继承机制。
2)枚举类和普通类一样,可以实现接口,如下形式。

enum 类名 implements 接口1,接口2{}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部