深入Java枚举机制

本文介绍了枚举类型的概念及其在程序中的应用,包括如何通过构造方法和抽象方法来增强枚举的功能,并提供了具体的Java代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、枚举作用的介绍

所谓的“枚举”,其实就是让某个类型变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时期就控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。

二、用普通类模拟枚举实现的原理

由于在实际的开发中,程序中经常免不了要用到时间问题,为了更好的统一表示“星期几”这个问题,我们可以自定义一个WeekDay类,具体代码如下:

public class EnumTest {

 

              public static void main(String[] args) {

                           

              WeekDay weekDay2 = WeekDay.FRI;

              System.out.println(weekDay2);

             

                     }

 

       public enum WeekDay{

 

              SUN(1),MON(),TUE,WED,THI,FRI,SAT;

              private WeekDay(){System.out.println("first");}

              private WeekDay(int day){System.out.println("second");}

       }

      

      

}

三、枚举的基本应用

 

1int compareTo(E o)

         比较此枚举与指定对象的顺序。

2boolean equals(Object other)

         当指定对象等于此枚举常量时,返回 true

 

 3Class<E> getDeclaringClass()

         返回与此枚举常量的枚举类型相对应的 Class 对象。

 4int hashCode()

         返回枚举常量的哈希码。

 5String name()

         返回此枚举常量的名称,在其枚举声明中对其进行声明。

 6int ordinal()

         返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

 7String toString()

         返回枚举常量的名称,它包含在声明中。

8static <T extends Enum<T>>

T  valueOf(Class<T> enumType, String name)

         返回带指定名称的指定枚举类型的枚举常量。

9、示例代码如下:

import java.util.Date;

 

public class EnumTest {

 

      

       public static void main(String[] args) {

             

             

              WeekDay weekDay2 = WeekDay.FRI;

              System.out.println(weekDay2);

              System.out.println(weekDay2.name());

              System.out.println(weekDay2.ordinal());    

              System.out.println(WeekDay.valueOf("SUN").toString());

              System.out.println(WeekDay.values().length);

      

       }

 

       public enum WeekDay{

 

              SUN(1),MON(),TUE,WED,THI,FRI,SAT;

              private WeekDay(){System.out.println("first");}

              private WeekDay(int day){System.out.println("second");}

       }

      

      

}

四、实现带有构造方法的枚举

      事实上,由于枚举中的每一个成员都是一个对象,由于是对象就可以初始化,所以就要调用构造方法,常见的枚举类型都没有书写构造方法,但那并不代表就没有构造方法,它只是调用了默认的空的构造方法而已。下面我们就书写一下拥有构造方法的枚举:

具体代码如下:

import java.util.Date;

 

publicclass EnumTest {

 

   

    publicstaticvoid main(String[] args) {

      

      

      

      

    }

 

   

   

    publicenum TrafficLamp{

       RED(30),

       GREEN(45),

       YELLOW(5);

   

       privateinttime;

       private TrafficLamp(int time){this.time = time;}

    }

}

 

五、实现带有抽象方法的枚举

既然枚举中的每一个成员都是一个对象,那么当我们定义了一个抽象方法时,它自然也要实现此抽象方法了,下面我们就做演示;

具体代码如下:

import java.util.Date;

 

publicclass EnumTest {

 

   

    publicstaticvoid main(String[] args) {

   

      

    }

 

   

   

    publicenum TrafficLamp{

       RED(30){

           public  TrafficLamp nextLamp(){

              returnGREEN;

           }

       },

       GREEN(45){

           public  TrafficLamp nextLamp(){

              returnYELLOW;

           }         

       },

       YELLOW(5){

           public  TrafficLamp nextLamp(){

              returnRED;

           }         

       };

       publicabstract TrafficLamp nextLamp();

       privateinttime;

       private TrafficLamp(int time){this.time = time;}

    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值