黑马程序员-枚举

---------------------- ASP.Net+Android+IOS开发</a>、 .Net培训、期待与您交流! ----------------------


枚举

在某些情况下,一个类的对象是有限而且固定的,比如季节类,它只有四个对象。这种实例有限而且固定的类,在Java里被称为枚举类

枚举的特点
枚举类中声明的每一个枚举值代表枚举类的一个实例对象
枚举类的构造器默认构造器使用private访问修饰符(因为不允许在枚举类外创建对象)
枚举类的所有对象都必须在枚举类中显示列出且要放在行首。这些对象,默认被public static final修饰
所有枚举类都提供了一个values()方法(API文档中查不到),返回枚举中所有对象的集合,该方法可以很方便的遍历所有枚举对象

枚举类可以有方法和属性,可以实现一个或多个接口,也可以定义自己的构造器(默认private修饰)
使用enum定义的枚举默认继承了java.lang.Enum类

/**
枚举
*/

//定义一个WeekDay枚举类,包含7个元素,每个元素都是WeekDay的对象
enum WeekDay
{
    SUN, MON, TUE, WED, THU, FRI, SAT;
}

class EnumTest
{
    public static void main(String[] args)
    {
        WeekDay weekDay = WeekDay.FRI;
        System.out.println(weekDay);    //toString()
        System.out.println(weekDay.name());
        System.out.println(weekDay.ordinal());    //序数
        //使用静态方法valueOf()把字符串变为枚举中存在的同名对象
        System.out.println(WeekDay.valueOf("SUN"));
        //values()返回枚举中所有对象到数组中WeekDay[]
        System.out.println(WeekDay.values().length);
    }
}


带有构造函数的枚举

枚举类中,元素须放在首行,枚举类中的元素可以使用带参的构造函数。枚举中所有构造函数默认即被private修饰,无法从外部创建对象

/**
带构造函数的枚举
*/

//定义一个WeekDay枚举类,包含7个元素,每个元素都是WeekDay的对象
enum WeekDay2
{
    //元素必须放在首行
    SUN(3), MON(), TUE, WED, THU, FRI, SAT;

    //构造函数只能使用private修饰
    private WeekDay2()
    {
        System.out.println("first");
    };

    //带参的构造函数
    private WeekDay2(int num)
    {
        System.out.println("second");
    }
}

class EnumTest2
{
    public static void main(String[] args)
    {
        WeekDay2 wd = WeekDay2.FRI;
    }
}


实现抽象方法的枚举

枚举中可以定义成员变量、构造方法、方法、抽象方法
每一个枚举类中的枚举元素都可以通过内部类的形式实现抽象方法

/**
实现抽象方法的枚举
*/

enum TrafficLamp
{
    //三个元素RED、GREEN、YELLO,构造函数初始化并实现了抽象方法
    RED(30)
    {
        public TrafficLamp nextLamp()
        {
            return GREEN;
        }
    }, 
    GREEN(45)
    {
        public TrafficLamp nextLamp()
        {
            return YELLOW;
        }
    }, 
    YELLOW(5)
    {
        public TrafficLamp nextLamp()
        {
            return RED;
        }
    };

    //私有成员变量
    private int time;

    //构造函数
    private TrafficLamp(int time)
    {
        this.time = time;
    }

    //抽象方法
    public abstract TrafficLamp nextLamp();
}

class TrafficLampTest
{
    public static void main(String[] args)
    {
        TrafficLamp red = TrafficLamp.RED;
        System.out.println(red.nextLamp());
    }
}
注意:
当枚举只有一个成员时,就可以作为一种单例的实现方式




---------------------- ASP.Net+Android+IOS开发</a>、 .Net培训、期待与您交流! ----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值