时间:2021-05-19
枚举特点
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;
}
}
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
这篇文章主要介绍了Java枚举类接口实例原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下枚举类可以实现
Java枚举的使用方法详解前言你代码中的flag和status,都应该用枚举来替代很多人都说,枚举在实际开发中很少用到,甚至就没用到。因为,他们的代码往往是这样
java枚举的功能挺多,但是坑更多,使用的时候要注意。如下面这个枚举。@Getter@AllArgsConstructorpublicenumEnumExpen
什么是枚举至于枚举,我们先拿生活中的枚举来入手,然后再引申Java中的枚举,其实它们的意义很相似。谈到生活中的枚举,假如我们在玩掷骰子的游戏,在我们手中有两个骰
通过一段时间的项目实践,发现java中的枚举与.net中的枚举有很大的差别,初期造成了我对java中的枚举一些错误理解及部分有缺陷的应用,其实追其原因还是因为我