枚举
枚举的由来
在java中有一些方法只接收特定的值,不能是其他的值。Java为了解决这类问题,在JDK1.5之后出现了枚举,用来表示特定的值
并且在编译时期就有所体现。
枚举的定义
枚举通过在关键字 enum 定义。
示例:
enum WeekDay
{ SUN,MON,TUE,WEN,THU,FRI,SAT}
特定的值都在{}中定义,默认都为公有静态的静态变量,且如果最后一个元素后定义方法必须加分号,否则可加可不加。
枚举的使用
枚举和类其实差不多,可以定义方法、抽象方法、构造函数或者实现接口、继承等,但是也有一些不同之处
1.每个元素都有一个默认的编号,从0开始。
2.每个元素默认都是枚举子类的实例化对象,是以类似内部类的形式实现的。
3.如果不指定构造函数,元素默认自带一个空参的构造函数。
4.构造函数必须定义在元素列表后且必须私有。
5.如果枚举内定义了抽象函数,元素必须实现。
6.枚举类的父类是java.lang.Enum<E>。
枚举常用方法
String name() 返回枚举元素的名称
int ordinal() 返回枚举元素的角标
static <T extends Enum<T>> valueOf(String name) 返回带指定名称的指定枚举类型的枚举常量,一般の指定名称。
values() 返回包含枚举所有元素的集合,主要用于遍历枚举元素,但Java标准的API未定义。
枚举的使用实例
实例1:
package com.itheim.day1;
//枚举示例
public class EnumDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
//获得枚举对象
WeekDay weekDay = WeekDay.FRI;
//遍历枚举
for(WeekDay weekday : weekDay.values())
{
System.out.println("第一个是"+weekday.ordinal()+"星期:"+weekday.name());
}
//将常量值赋给枚举对象
WeekDay weekDay2 = WeekDay.valueOf("FRI");
System.out.println(weekDay2);
//遍历枚举元素
System.out.println(weekDay2.values().length);
}
//定一个枚举
public enum WeekDay
{
SUN,MON,TUE,WEN,THU,FRI,SAT
}
}
示例2:交通灯枚举
package com.itheim.day1;
public class TrafficLamp {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
//定义一个交通灯枚举
public enum Lamp
{
RED(10)
{
@Override
public Lamp nextLampEnum() {
// TODO Auto-generated method stub
return YELLOW;
}
}, GREEN(15) {
@Override
public Lamp nextLampEnum() {
// TODO Auto-generated method stub
return RED;
}
}, YELLOW(5) {
@Override
public Lamp nextLampEnum() {
// TODO Auto-generated method stub
return GREEN;
}
};
//为枚举类定义抽象函数
private Lamp(int time)
{
System.out.println("先把所有枚举元素加载进内存"+this.time());
}
private String time() {
// TODO Auto-generated method stub
return null;
}
//定义抽象方法
public abstract Lamp nextLampEnum();
}
}
枚举总结:
1.枚举是一个特殊的类。
2.当枚举只有一个元素时就是一个单例设计模式。
3.枚举的实例变量是把所有元素加载进内存实例,耗费资源,每个元素都是一个枚举的子类内部类实例对象。
跟楼主交流一下哈 |