Java分享笔记:自定义枚举类 & 使用enum关键字定义枚举类

Wesley13
• 阅读 653

  在JDK1.5之前没有enum关键字,如果想使用枚举类,程序员需要根据Java语言的规则自行设计。从JDK1.5开始,Java语言添加了enum关键字,可以通过该关键字方便地定义枚举类。这种枚举类有自己的程序编写规则,并且具有一些特殊方法。

  下面是笔者分别针对自定义枚举类和enum枚举类的程序设计。

[1] 自定义枚举类

 1 /*-------------------------
 2 JDK1.5之前通过自行设计程序,来自定义枚举类
 3 下面以季节为例自定义枚举类
 4 --------------------------*/
 5 package pack01;
 6 
 7 public class Season {
 8     public static void main(String[] args) {
 9 
10         FourSeasons spring = FourSeasons.SPRING;
11         FourSeasons winter = FourSeasons.WINTER;
12         
13         System.out.println( spring.getName() );
14         System.out.println( spring.toString() );
15         System.out.println();
16         System.out.println( winter.getName() );
17         System.out.println( winter.toString() );
18     }
19 }
20 
21 // 定义表示季节的枚举类,共有4个内部对象
22 class FourSeasons {
23 
24     // 定义类的属性:私有的,终态的,在构造器中进行初始化
25     private final String name;
26 
27     // 将构造器私有化,使构造器不能在类的外部被使用
28     private FourSeasons(String name) {
29         this.name = name;
30     }
31 
32     // get方法返回属性值
33     public String getName() {
34         return name;
35     }
36 
37     // 覆盖toString方法,设置默认打印值
38     public String toString() {
39         return "This is " + name;
40     }
41 
42     // 在类的内部创建对象
43     public static final FourSeasons SPRING = new FourSeasons("spring");
44     public static final FourSeasons SUMMER = new FourSeasons("summer");
45     public static final FourSeasons AUTUMN = new FourSeasons("autumn");
46     public static final FourSeasons WINTER = new FourSeasons("winter");
47 }

[2] 使用enum关键字定义枚举类

 1 /*-------------------------
 2 JDK1.5开始可以通过enum关键字来定义枚举类
 3 使用enum关键字定义枚举类与自定义枚举类的程序编写不同之处:
 4 ....//将关键字class用关键字enum替换
 5 ....//必须在类体的一开始创建内部的对象,并遵循一定的书写规则
 6 ....//枚举类有两个常用的方法:
 7 ........//values():将枚举类中的所有对象以数组的方式返回
 8 ........//valueOf(String arg0):将类中的某一个对象的名字以字符串的形式作为参数传入,返回该对象
 9 ....//枚举类可以实现接口,覆盖接口中的抽象方法既可以写在枚举类的类体中,也可以写在对象后的花括号中
10 ........//若写在了对象后的花括号中,则该方法不再是所有对象公共的。不同对象调用同一方法时,可以得到不同的效果。
11 
12 下面以季节为例使用enum关键字定义枚举类
13 --------------------------*/
14 package pack02;
15 
16 public class Season {
17     public static void main(String[] args) {
18         
19         //测试枚举类中的values()方法
20         FourSeasons[] seasons = FourSeasons.values();
21         for( int i=0; i<seasons.length; ++i ) {
22             System.out.println( seasons[i].getName() );
23         }
24         System.out.println();
25         
26         //测试枚举类中的valueOf()方法,创建春天的对象
27         FourSeasons spring = FourSeasons.valueOf("SPRING");
28         System.out.println( "valueOf(\"SPRING\"): " + spring.getName() + '\n' );
29         
30         //创建夏,秋,冬的对象
31         FourSeasons summer = FourSeasons.SUMMER;
32         FourSeasons autumn = FourSeasons.AUTUMN;
33         FourSeasons winter = FourSeasons.WINTER;
34         spring.printWords();
35         summer.printWords();
36         autumn.printWords();
37         winter.printWords();
38         //上面调用接口中的方法打印出来的结果,春天与其他三个季节是不同的,因为SPRING对象重新覆盖了接口中的方法
39     }
40 }
41 
42 //定义一个接口,让枚举类来实现该接口
43 interface Inter{
44     void printWords();
45 }
46 
47 // 定义表示季节的枚举类,共有4个内部对象
48 enum FourSeasons implements Inter { //使用enum关键字,并实现上述接口
49 
50     //必须在类体中的一开始创建对象,对象之间用逗号分开,并且要遵循一定的书写规则
51     SPRING("spring"){
52         public void printWords() {//在创建对象时可以单独重写接口中的方法,这时类体中的重写方法对于该对象将不再起作用
53             System.out.println("This is spring");
54         }
55     },
56     SUMMER("summer"),
57     AUTUMN("autumn"),
58     WINTER("winter");
59     
60     // 定义类的属性:私有的,终态的,在构造器中进行初始化
61     private final String name;
62 
63     // 将构造器私有化,使构造器不能在类的外部被使用
64     private FourSeasons(String name) {
65         this.name = name;
66     }
67     
68     // get方法返回属性值
69     public String getName() {
70         return name;
71     }
72     
73     // 重写接口中的抽象方法
74     public void printWords() {
75         System.out.println("There are four different seasons.");
76     }
77 }

注:希望与各位读者相互交流,共同学习进步。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java枚举类型enum的使用
java枚举类型enum的使用最近跟同事讨论问题的时候,突然同事提到我们为什么java中定义的常量值不采用enmu枚举类型,而采用publicfinalstatic 类型来定义呢?以前我们都是采用这种方式定义的,很少采用enum定义,所以也都没有注意过,面对突入起来的问题,还真有点不太清楚为什么有这样的定义。既然不明白就抽
Wesley13 Wesley13
3年前
java枚举
https://www.cnblogs.com/hyl8218/p/5088287.html摘抄并自查语法(定义)创建枚举类型要使用enum关键字,隐含了所创建的类型都是java.lang.Enum类的子类。枚举类符合通用模式ClassEnum<EextendsEnum<E,而E表示枚举类型的名称。枚举类型的每一
Wesley13 Wesley13
3年前
java枚举类型
java枚举类型enum枚举类型是java5新增特性的一部分,是一种特殊的数据类型(既是一种类类型但是又比类类型多些特殊的约束)枚举定义的方式:publicenumDay{MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY}定义
lucien-ma lucien-ma
3年前
Java 实用类
实用类枚举MathRandomStringStringBuffer日期类枚举枚举(Enum)是一种有确定取值区间的数据类型,它本质上是一种类,具有简洁、安全、方便等特点。可以这样理解,枚举的值被约束到一个特定的范围,只能取这个范围以内的值。我们为什么要用枚举呢?我们在描述对象的一些属性特征时,可选择的值是一个特定范围的,不能随便定义。比如性别只
Wesley13 Wesley13
3年前
java枚举类
使用enum声明,默认直接继承了java.lang.Enum类,而不是Object类;枚举类的对象是固定的,实例个数有限,不可以再new(),枚举对象后可以跟()。枚举元素必须位于枚举类体中的最开始部分,枚举元素后要有分号与其他成员分隔。枚举类的构造方法的权限修饰符默认是private;一旦枚举对象后面加上{},那么该对象实际是枚举匿名内部
Wesley13 Wesley13
3年前
Java枚举的小知识点
enum是jdk1.5引入的,使用它可以创建枚举类型,就像使用class创建类一样。enum关键字创建的枚举类型默认是java.lang.Enum(一个抽象类)的子类用法1常量一般定义常量都是publicstaticfinal…,现在可以把相关常量都放在一个枚举类里,而且枚举比常量提供更多方法1.enumsea
Wesley13 Wesley13
3年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
小万哥 小万哥
9个月前
深入理解 C# 编程:枚举、文件处理、异常处理和数字相加
C枚举枚举是一个特殊的“类”,表示一组常量(不可更改/只读变量)。要创建枚举,请使用enum关键字(而不是class或interface),并用逗号分隔枚举项:csharpenumLevelLow,Medium,High您可以使用点语法访问枚举项:csha