java枚举入门

来源:互联网 发布:js input 失去焦点 编辑:程序博客网 时间:2024/05/16 07:42

java 5新增了一个enum关键字(它与class、interface关键字的地位相同),用以定义枚举类。枚举类是一种特殊的类,它一样可以有自己的Field、方法,可以实现一个或者多个接口,也可以定义自己的构造器。

 

枚举类与普通的类有如下区别:

1、枚举类可以实现一个或者多个接口,使用enum定义的枚举类默认继承了java.lang.Enum类,而不是继承了Object类。其中Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口。

2、使用enum定义、非抽象的枚举类默认会使用final修饰,因此枚举类不能被继承

3、枚举类的构造器只能使用private访问控制符修饰,如果省略了访问控制符,则默认是private修饰,如果指定访问控制符只能是private

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

 
public enum SeasonEnum{//在第一行列出4个枚举实例,用逗号隔开,最后一个用分号SPRING,SUMMER,FALL,WINTER;}
 
public class EnumTest{public void jduge(SeasonEnum s){//switch语句里表达式可以是枚举值switch(s){case SPRING:System.out.println("春天");break;case SUMMER:System.out.println("夏天");break;case FALL:System.out.println("秋天");break;case WINNER:System.out.println("冬天");break;}}public static void main(String[]args){for(SeasonEnum s: SeasonEnum.values()){System.out.println(s);}}new EnumTest.judge(SeasonEnum.SPRING);}
 
运行结果:
SPRING
SUMMER
FALL
WINTER
春暖花开,正好踏青
public enum Gender {//此处的枚举值必须调用对应构造器来创建MALE("男"),FEMALE("女");private String name;//枚举类的构造器只能使用private修饰private Gender(String name){this.name = name;}public String getName(){ return this.name;}}
 
public class TestGender{public static void main(String[] args) {Gender g = Enum.valueOf(Gender.class , "FEMALE");System.out.println(g + "代表:" + g.getName());}}
 
运行结果:
FEMALE代表:女
在枚举中列出枚举值时,实际上就是调用构造器创建枚举对象,只是这里无需使用new关键字,也无需显示调用构造器。前面列出的枚举值无需传入参数,甚至无需使用括号,仅仅是因为前面的枚举类包含无参的构造器。
上面的例子实际上等同于:
public static final Gender MAIL = new Gender("男");
public static final Gender FEMAIL = new Gender("女");
 
枚举实现接口的例子
public interface GenderDesc{void info();}public enum Gender implements GenderDesc{//此处的枚举值必须调用对应构造器来创建MALE("男"){public void info(){System.out.println("这个枚举值代表男性");}},FEMALE("女"){public void info(){System.out.println("这个枚举值代表女性");}};private String name;//枚举类的构造器只能使用private修饰private Gender(String name){this.name = name;}public String getName(){ return this.name;}/*public void info(){System.out.println("这是一个用于用于定义性别属性的枚举类");}*/}
 
枚举定义抽象方法
public enum Operation2{PLUS{public double eval(double x , double y){return x + y;}}, MINUS{public double eval(double x , double y){return x - y;}}, TIMES{public double eval(double x , double y){return x * y;}}, DIVIDE{public double eval(double x , double y){return x / y;}};//为枚举类定义一个抽象方法,这个抽象方法由不同枚举值提供不同的实现public abstract double eval(double x, double y);public static void main(String[] args){System.out.println(Operation.PLUS.eval(3, 4));System.out.println(Operation.MINUS.eval(5, 4));System.out.println(Operation.TIMES.eval(5, 4));System.out.println(Operation.DIVIDE.eval(5, 4));}}
 
原创粉丝点击