java inner enum_Java——枚举enum

枚举

我认为:枚举简单的说也可以一种数据类型,只不过是这种数据类型只包含我们自定义的数据,它是一组有共同特性的数据的集合。举个简单例子,颜色也可以定义成枚举类型,它可以包含你自定义的任何颜色,当需要的时候,只需要通过枚举调用即可,另外比如季节(春夏秋冬)、星期(星期一到星期日)、衣服的号码(S、M、L、XL)等等这些具有共同特性的数据都可以定义枚举。

下面是个例子:

public classEnumTest {public static voidmain(String[] args) {

Scanner in= newScanner(System.in);

System.out.println("请输入:");

String input=in.next().toUpperCase();

Size size=Enum.valueOf(Size.class,input);

System.out.println("size="+size);

System.out.println("abbreviation="+size.getAbbreviation());if(size==Size.EXTRA_LAGRE){

System.out.println("Good job!");

}

}enumSize{

SMALL("S"),MEDIUM("M"),LAGRE("L"),EXTRA_LAGRE("XL");privateString abbreviation;privateSize(String abbreviation){this.abbreviation=abbreviation;

}publicString getAbbreviation() {returnabbreviation;

}

}

}

枚举的定义

枚举类型的每一个值都将映射到protected Enum(String name, int ordinal)构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。

public enumSizeEnum {

SMALL,MEDIUM,LAGRE,EXTRA_LAGRE;

}

这段代码实际上调用了4次 Enum(String name, int ordinal)

new Enum("SMALL",0);new Enum("MEDIUM",1);new Enum("LAGRE",2);new Enum("EXTRA_LAGRE",3);

枚举的常用方法

static Enum valueOf(Class enumClass, String name)

返回指定名字、给定义的枚举常量。

String name()

返回枚举常量的名称

String toString()

返回枚举的常量名称 比name更常用。

int ordinal()

返回枚举值在枚举中的位置(索引),从0开始。

int compareTo(E other)

如果返回枚举常量在other之前,则返回一个负值;如果this==other,则返回0;否则返回正常值。枚举常量出现的次序在enum声明中给出。

下面是个例子:

public static voidmain(String[] args){

Size size =Size.MEDIUM;

System.out.println(size);//MEDIUM

System.out.println(size.name());//MEDIUM

System.out.println(size.ordinal());//1

System.out.println(Size.valueOf("MEDIUM").toString());//MEDIUM

System.out.println(Size.values().length);//4 获取枚举长度

}

枚举的遍历

public static voidmain(String[] args){

for(Size size:Size.values()){

System.out.println(size);

}

}

枚举的EnumSet,EnumMap 的应用

public classTest {public static voidmain(String[] args) {//EnumSet的使用

EnumSet sizeSet = EnumSet.allOf(SizeEnum.class);for(SizeEnum size : sizeSet) {

System.out.println(size);

}//EnumMap的使用

EnumMap sizeMap = new EnumMap(SizeEnum.class);

sizeMap.put(SizeEnum.SMALL,"S号");

sizeMap.put(SizeEnum.MEDIUM,"M号");

sizeMap.put(SizeEnum.LAGRE,"L号");

sizeMap.put(SizeEnum.EXTRA_LAGRE,"XL号");

System.out.println(sizeMap+"-----sizeMap");//循环输出EnumMap值

for (Iterator> iter =sizeMap.entrySet().iterator(); iter.hasNext();) {

Entry entry =iter.next();

System.out.println(entry.getKey().name()+ ":" +entry.getValue());

}

}

}

enum 经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum。

枚举特点

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

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

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

4.枚举类型的变量值能存储这个类型声明中给定的某个枚举值或者null值,null表示这个变量没有设置任何值。

5.如果比较两个枚举类型de值,永远不要调用equals,直接使用“==”就可以了。

6.枚举也可以像一般的类一样添加方法和属性,可以为它添加静态和非静态的属性或方法。

例如:

public enumGender {

MALE("男"), FEMALE("女");privateString name;privateGender(String name) {this.name =name;

}publicString getName() {return this.name;

}publicString toString() {

String name= null;switch (this) {caseMALE:

name= "男";break;caseFEMALE:

name= "女";break;

}returnname;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值