枚举enum

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());

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值