您的位置:首页 > 其它

枚举总结

2009-12-12 22:24 337 查看
枚举本质上是一个类,他编译后会生成一个class文件,并且这个类的对象是现成的,在定义类的时候,即定义好了对象, 程序员要使用的时候,只能从中选择,而无权创建。创建枚举最简单的形式如下:

enum 枚举名{ 枚举值1(..),枚举值2(..),.....;}//枚举值之间都是都好,最后一个是分号;

在没有出现枚举以前,我们往往都是通过模式来达到枚举的效果,如下:

final class Season{
public static final Season SPRING=new Season();
public static final Season WINTER=new Season();
public static final Season SUMMER=new Season();
public static final Season AUTUMN=new Season();
private Season(){}
}

枚举有如下的性质:

1、枚举中可以有构造方法、方法和属性,且该构造方法必须是private的

示例:

public class EnumConstructor {
public static void main(String[] a) {
for (Temp t : Temp.values())
System.out.println(t + " is : " + t.getValue());
}

public enum Temp {
absoluteZero(-459), freezing(32),
boiling(212), paperBurns(451);

private final int value;
Temp(int value) {//如果在Temp前面加一个public则会出现编译错误
this.value = value;
}
public int getValue() {
return value;
}
}
}


2、枚举不能继承类(本身有父类Enum),但可以实现接口,枚举不能有子类也就是说其本身默认是具有final属性的

3、枚举可以在switch中使用

示例:

public class EnumSwitch {
private enum Color { red, blue, green }
public static void main(String[] args) {
doIt(Color.red);
}

private static void doIt(Color c){
switch (c) {
case red: //red没有加引号
System.out.println("value is " + Color.red);
break;
case green:
System.out.println("value is " + Color.green);
break;
case blue:
System.out.println("value is : " + Color.blue);
break;
default :
System.out.println("default");
}
}
}


4、枚举中可以定义抽象方法,且定义的抽象方法由枚举值实现

示例:

enum Operation{
ADD('+'){
public double calculate(double s1,double s2){
return s1+s2;
}
},
SUBSTRACT('-'){
public double calculate(double s1,double s2){
return s1-s2;
}
},
MULTIPLY('*'){
public double calculate(double s1,double s2){
return s1*s2;
}
},
DIVIDE('/'){
public double calculate(double s1,double s2){
return s1/s2;
}
};
char name;
public char getName(){
return this.name;
}
Operation(char name){
this.name=name;
}
public abstract double calculate(double s1 ,double s2);
}


5、枚举实例可以由数字来指定

示例:

public class EnumNumber
{
private enum WeekDay{Sun,Mon,Tue,Wed,Thu,Fri,Sat}
public static void main(String [] args)
{
WeekDay a;
WeekDay b;
WeekDay c;
a=WeekDay.values()[0];//实现方式和C#不同,c#可以直接对数字进行强制转换即可以a=(WeekDay)0;
b=WeekDay.values()[1];
c=WeekDay.Wed;
System.out.println("a:"+a);
System.out.println("b:"+b);
System.out.println("c:"+c);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: