详细介绍java中枚举的使用

来源:爱站网时间:2019-03-05编辑:网友分享
Java枚举类在类加载过程中创建自定义枚举对象,并在静态块中初始化它们,枚举适用于对象数目固定的类,下面就跟着爱站技术频道小编的步伐一起来了解一下详细介绍java中枚举的使用吧!

Java枚举类在类加载过程中创建自定义枚举对象,并在静态块中初始化它们,枚举适用于对象数目固定的类,下面就跟着爱站技术频道小编的步伐一起来了解一下详细介绍java中枚举的使用吧!

枚举特点

1.用enum定义枚举类默认继承了java.lang.Enum类而不是继承了Object类。其中java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口

2.枚举类的构造函数只能使用private访问修饰符,如果省略了其构造器的访问控制符,则默认使用private修饰;

3.枚举类的所有实例必须在枚举类中显式列出,否则这个枚举类将永远都不能产生实例。列出这些实例时,系统会自动添加public static final修饰,无需程序员显式添加。

复制代码 代码如下:

public enum Week {
MON{
public String toLocaleString(){
return "星期一";
}
},TUES{
public String toLocaleString(){
return "星期二";
}
},WEB{
public String toLocaleString(){
return "星期三";
}

},THUR{
public String toLocaleString(){
return "星期四";
}

},FRI{
public String toLocaleString(){
return "星期五";
}

},SAT{
public String toLocaleString(){
return "星期六";
}

},SUN{
public String toLocaleString(){
return "星期日";
}

};
public abstract String toLocaleString();
}


枚举的遍历

复制代码 代码如下:


public class EnumTest {
public static void main(String[] args){
for(Week w:Week.values()){
System.out.println(w);
}
}
}


枚举的常用方法

int compareTo方法

String name()返回枚举实例的名称

int ordinal() 返回枚举值在枚举中的索引

String toString()返回枚举的实例名称 比name更常用

public static valueOf()

复制代码 代码如下:

public class EnumTest {
public static void main(String[] args){
Week day =Week.FRI;
System.out.println(day);//FRI
System.out.println(day.name());//FRI
System.out.println(day.ordinal());//4
System.out.println(Week.valueOf("SUN").toLocaleString());//星期日
System.out.println(Week.values().length);//7 获取枚举长度
}
}


枚举的构造函数

复制代码 代码如下:


public enum Gender {
MALE("男"),FEMALE("女");
private String name;
private Gender(String name){
this.name =name;
}
public String getName(){
return this.name;
}
public String toString(){
String name = null;
switch(this){
case MALE:
name="男";
break;
case FEMALE:
name="女";
break;
}
return name;
}

}


枚举的综合应用示例:交通灯

复制代码 代码如下:

public enum Lamp {
/*每个枚举元素各表示一个方向的控制灯*/
S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",false),
/*下面元素表示与上面的元素的相反方向的灯,它们的“相反方向灯”和“下一个灯”应忽略不计!*/
N2S(null,null,false),N2E(null,null,false),W2E(null,null,false),W2N(null,null,false),
/*由南向东和由西向北等右拐弯的灯不受红绿灯的控制,所以,可以假想它们总是绿灯*/
S2E(null,null,true),E2N(null,null,true),N2W(null,null,true),W2S(null,null,true);

private Lamp(String opposite,String next,boolean lighted){
this.opposite = opposite;
this.next = next;
this.lighted = lighted;
}


/*当前灯是否为绿*/
private boolean lighted;
/*与当前灯同时为绿的对应方向*/
private String opposite;
/*当前灯变红时下一个变绿的灯*/
private String next;
public boolean isLighted(){
return lighted;
}

/**
* 某个灯变绿时,它对应方向的灯也要变绿
*/
public void light(){
this.lighted = true;
if(opposite != null){
Lamp.valueOf(opposite).light();
}
System.out.println(name() + " lamp is green,下面总共应该有6个方向能看到汽车穿过!");

}

/**
* 某个灯变红时,对应方向的灯也要变红,并且下一个方向的灯要变绿
* @return 下一个要变绿的灯
*/
public Lamp blackOut(){
this.lighted = false;
if(opposite != null){
Lamp.valueOf(opposite).blackOut();
}

Lamp nextLamp= null;
if(next != null){
nextLamp = Lamp.valueOf(next);
System.out.println("绿灯从" + name() + "-------->切换为" + next);
nextLamp.light();
}
return nextLamp;
}
}

以上都是爱站技术频道小编为大家搜集的详细介绍java中枚举的使用,希望对大家的学习有一定的帮助!

上一篇:教你解决Java加载资源文件的路径问题

下一篇:JDK环境变量配置的具体操作步骤

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载