黑马程序员——Java高新技术之枚举

来源:互联网 发布:base笔记软件 编辑:程序博客网 时间:2024/05/17 09:06

-------android培训、java培训、期待与您交流! ----------

枚举

枚举enum

枚举就是要让某个类型的变量的取值,只能为若干个固定值中的一个,否则,编译器报错

枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。

枚举是一种特殊的类,枚举中的每一个元素都是一个实例对象

用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能。

public abstract class WeekDay {//私有化该构造函数private WeekDay(){};//每一个元素都用静态来表示public final static WeekDay SUN = new WeekDay(){//每一个元素都覆盖其抽象方法public WeekDay nextDay() {// TODO Auto-generated method stubreturn MON;}};public final static WeekDay MON = new WeekDay(){@Overridepublic WeekDay nextDay() {// TODO Auto-generated method stubreturn SUN;}};//抽象方法public abstract WeekDay nextDay();public String toString(){return this==SUN?"SUN":"MON";}}package enume;public class EumeDemo {public static void main(String []args){WeekDay weekday = WeekDay.MON;System.out.println(weekday.nextDay());}}
枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。

枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。

把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。

构造方法必须是私有的

在枚举对象后加上一个大括号,可以指定用那个构造方法

只要用到了枚举类,它里面的所有对象(元素)都会被初始化

枚举只有一个成员时,就可以作为一种单例的实现方式。

public enum WeedDay1{SUN(),MON,TUE,WED,THI,FRI,SAT;private WeedDay1() {System.out.println("WeedDay1 run");}private WeedDay1(int day){System.out.println("WeedDay1 day run");}}
普通方法就是创建对象,然后调用

主要是抽象方法要注意,带有抽象方法的枚举, 每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义。

public enum TrafficLamp{//这些是枚举对象,但是枚举中用了抽象方法,而抽象方法是不能有对象的,只有子类覆盖其所有抽象方法才可以,所以用到了内部类RED(30){public  TrafficLamp nextLamp(){return GREEN;}},GREEN(45){public  TrafficLamp nextLamp(){return YELLOW;}},YELLOW(5){public  TrafficLamp nextLamp(){return RED;}};private int time;//构造方法private TrafficLamp(int time){this.time = time;}//抽象方法public abstract TrafficLamp nextLamp();}}
枚举中的一些方法:

静态方法:

valueOf(Class<T> enumType, String name) 返回带指定名称的指定枚举类型的枚举常量。

values()返回枚举内所有元素的数组

非静态:

name():返回常量名称

ordinal():返回枚举常量的位置

getClass():返回类名

public enum WeekDay {SUN(),MON,TUE,WED,THI,FRI,SAT;}public class demo {public static void main(String[] args) {WeekDay wd = WeekDay.FRI;System.out.println(wd.valueOf("SUN"));//返回指定的枚举元素 SUNSystem.out.println(wd.getClass());//返回类名class WeekDaySystem.out.println(wd.name());//返回枚举元素名FRISystem.out.println(wd.ordinal());//返回枚举元素位置5WeekDay[] dd = wd.values();//返回所有元素的数组for(WeekDay ww:dd){System.out.print(ww+" ");//SUN MON TUE WED THI FRI SAT }}}


0 0