当前位置: 首页 > >

男 女 java 枚举_java枚举类型知识点

发布时间:

原标题: java枚举类型知识点



public enum Color{


RED,BLUE,BLACK,YELLOW,GREEN


}


enum很像特殊的class,实际上enum声明定义的类型就是一个类


这些类都是库类中Enum类的子类(Java.lang.Enum ),他们继承了Enum中许多有用的方法


枚举值都是public static final的,也就是常量,因此,枚举类中的枚举值应全部大写


枚举类型是class,在枚举类型中有构造器,方法和字段。但枚举的构造器有很大的不同:


1.构造器只是在构造枚举值的时候被调用


2.构造器私有private,不允许有public构造器


3.枚举可以在switch语句中使用


枚举特点


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; } }返回搜狐,查看更多


责任编辑:



友情链接: