您的位置:首页 > 编程语言 > Java开发

java枚举

2015-07-29 21:12 429 查看

枚举的作用介绍

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

2、枚举就是一种特殊的类,其中的每个元素都是该类中的一个实例对象

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

1、私有的构造方法

2、每个元素分别用一个公有的静态成员变量表示

3、可以有若干个共有的方法或抽象方法。采用抽象方法定义nextDay就可将大量的if.else语句转移成一个个独立的类

WeekDay.java

public class WeekDay {
private WeekDay(){}
public final static WeekDay SUN = new WeekDay();
public final static WeekDay MON = new WeekDay();

public WeekDay nextDay(){
if( this == SUN ){
return MON;
}else {
return SUN;
}
}
public String toString(){
return this==SUN?"SUN":"MON";
}
}


采用抽象方法:

public abstract class WeekDay {
private WeekDay(){}
public final static WeekDay SUN = new WeekDay(){

@Override
public WeekDay nextDay() {
// TODO Auto-generated method stub
return MON;
}

};
public final static WeekDay MON = new WeekDay(){

@Override
public WeekDay nextDay() {
// TODO Auto-generated method stub
return SUN;
}

};

public abstract WeekDay nextDay();
public String toString(){
return this==SUN?"SUN":"MON";
}
}

EnumTest.java

public class EnumTest {
public static void main(String[] args){
WeekDay weekDay = WeekDay.MON;
System.out.println(weekDay.nextDay());
}
}

枚举的基本应用

public class EnumTest {
public static void main(String[] args) {
WeekDay mon = WeekDay.MON;
System.out.println(mon);//名称为MON
System.out.println(mon.name());//名称为MON
System.out.println(WeekDay.valueOf("SUN"));//字符串变为WeekDay对象,打印出SUN
System.out.println(WeekDay.values().length);//7
}
public enum WeekDay{
SUN,MON,TUE,WED,THI,FRI,SAT
}
}

实现带有构造方法的枚举

public class EnumTest {
public static void main(String[] args){
WeekDay weekDay = WeekDay.MON;
}
public enum WeekDay{
SUN,MON,TUE,WED,THI,FRI,SAT;
private WeekDay() {
System.out.println("first constructor");
}
private WeekDay(int day){
System.out.println("second constructor");
}
}
}
结果:
first constructor

first constructor

first constructor

first constructor

first constructor

first constructor

first constructor
因为枚举类的每个静态对象,在使用类的时候就会创建

若采用方式:SUN,MON(1),TUE,WED,THI,FRI,SAT,表示在创建MON元素的时候使用第二个构造器,结果:

first constructor

second constructor

first constructor

first constructor

first constructor

first constructor

first constructor

实现带有抽象方法的枚举

public class EnumTest {
public static void main(String[] args){
TrafficLamp trafficLamp = TrafficLamp.RED;
System.out.println(trafficLamp.nextLamp());
}
public enum TrafficLamp{
RED(30){
public TrafficLamp nextLamp() {
return GREEN;
}
},GREEN(45){
public TrafficLamp nextLamp() {
return YELLOW;
}
},YELLOW(5){
public TrafficLamp nextLamp() {
return RED;
}
};
//抽象方法
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){
this.time = time;
}
}
}
结果:
GREEN

枚举只有一个成员时,就可以做为一种单例的实现方式

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: