枚举enum

来源:互联网 发布:优化后人员配制方案 编辑:程序博客网 时间:2024/06/04 18:33

Enum一般用来表示一组相同类型的常量。如性别、日期、月份、颜色等。对这些属性用常量的好处是显而易见的,不仅可以保证单例,且在比较的时候可以用”==”来替换equals。
JDK1.5之前没有Enum这个类型,那时候一般用接口常量来替代(C语言中的这种功能)。

public enum Color {    RED,BLUE,GREEN,WHITE,BLACK;//对象常量之间用逗号隔开,最后的分号可以省略}
/* * 三个知识点: * 1.如果在对象常量后面要添加其它代码则必须以“;”号结束 * 2.如果我们没有给枚举类型写构造方法,那么Java会自动帮我们加一个(私有的) * 3.枚举类中的构造方法只能是private的,即使我们不写,Java也会帮我们加private关键字 */public enum SexEnum {    MALE,FEMALE;    SexEnum(){    }}
public enum Signal {    GREEN,YELLOW,RED}
public enum Signal2 {    RED(1,"红色"),GREEN(2,"绿色"),YELLOW(3,"黄色");    private int no;    private String name;    //※从语法上讲,上面的属性不声明成final是可以,而且外部也可通过调用setter方法更改属性。    //※但是从实际项目的需求看,一般的属性都要声明成final,这样外部就无法通过setter方法更改信息了。    //如果上面的枚举常量对象是复杂类型(即用默认空参构造无法直接构造出来),    //那么我们就必须自己写能够构造这种类型对象的对应构造方法    private Signal2(int no,String name){        this.no=no;        this.name=name;    }    public int getNo() {        return no;    }    public void setNo(int no) {        this.no = no;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}
public class Test {    public static void main(String[] args) {        sexEnumDemo();        colorEnumDemo();        signalEnumDemo() ;        signalEnum2Demo();        }    public static void sexEnumDemo(){        //SexEnum a = new SexEnum();//枚举类型的对象是不能new---其实它的构造方法是private        SexEnum m = SexEnum.MALE;        SexEnum f = SexEnum.FEMALE;        SexEnum objs[] = SexEnum.values();        for(SexEnum obj:objs){            System.out.println(obj);        }    }        public static void colorEnumDemo(){            Color c1 = Color.BLUE; //c1的取值只能是 枚举Color中预先定义的其中一个            System.out.println(c1); //c1就是一个类对象,只是它的取值被限定了。该对象可以调用Object中的函数            Object obj = c1;//c1可以看成是Object的子类对象        }    public static void signalEnumDemo() {        Signal res = change(Signal.RED);        System.out.println(res);    }    public static Signal change(Signal c) {        switch (c) {        case RED:            return Signal.GREEN;        case YELLOW:            return Signal.RED;        case GREEN:            return Signal.YELLOW;        }        return null;    }    // //////////////////////////////////////////////////    public static void signalEnum2Demo() {        // Signal2 s1 = Signal2.GREEN;        Signal2 s1 = Signal2.RED;        // 显示给用户看时---用String型信息        String nm = s1.getName();        System.out.println("nm:" + nm);        // 给程序识别时---用int型信息        int n = s1.getNo();        System.out.println("n:" + n);        s1.setName("abc");        System.out.println("::::" + s1.getName());    }}