黑马程序员-java 枚举

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------ 

 

枚举有什么作用:

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

那么以前的提现的形式是什么?

步骤:

1.私有默认构造函数,从而保证构造函数只能被内部使用。

2.每个元素使用公有静态成员表示

如:

publicclass Color {

    private Color(){//...};

    publicstaticfinal Color RED=new Color();

    publicstaticfinal Color BLUE=new Color();

    publicstaticfinal Color YELLOW=new Color();

    publicstaticfinal Color GREEN=new Color();

}

枚举可以让编译器在编译时就可以控制源程序中填写的非法值,也就是说要是枚举有问题,那么在编译过程就不会通过。

通过enum关键字定义枚举类型,那么枚举有什么特点呢?

1.所有构造器必须私有化。

2. 其实每个枚举元素的成员其实就是定义的枚举类型的一个实例,并且它们都静态常量,因此枚举值最好全部大写。

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

 

例如:枚举类

publicenum Color{

    RED,

    BLUE(),

    YELLOW,

    GREEN;

    //上面的BLUE和BLUE()的效果是相同的都是调用默认的构造方

}

而对于枚举,就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。

一、枚举提供的常用方法:

toString():可以直接获取枚举值的字符串描述

静态 values():可以让你取得所以枚举成员实例,并且以数组方式返回

静态 valueOf():可以让你将指定的字符串转换为对应枚举类型对象。

compareTo():可以比较两个枚举对象在枚举中的顺序,其中返回值:-1表示之前 0表示相同位置 1表示之后;这个方法的前提是这两个枚举值必须属于同一个枚举类,否则会报错。

ordinal():依枚举顺序得到对应的索引值,默认以0开始。

实例:

publicenum Color{

    RED,BLUE,YELLOW,GREEN;

    publicvoid getColorName(){

       switch(this){

       caseRED:

           System.out.println("颜色是:red");

           break;

       caseBLUE:

           System.out.println("颜色是:blue");

           break;

       caseYELLOW:

           System.out.println("颜色是:yellow");

           break;

       caseGREEN:

           System.out.println("颜色是:green");

           break;

       /*

       //下面的报错,原因是不能加入不属于Color的枚举元素

       case BLACK:

           System.out.println("颜色是:BLACK");

           break;

       */

       }

    }

    publicstaticvoid main(String[] args){

       Color red=Color.RED;

       Color blue=Color.BLUE;

       //可以直接获取枚举值的字符串描述

       System.out.println(red.toString());  //RED

       //可以让你取得所以枚举成员实例,并且以数组方式返回

       System.out.println(Color.values());  //[LColor;@de6ced

       //可以让你将指定的字符串转换为对应枚举类型对象。

       System.out.println(Color.valueOf("BLUE")); //BLUE

       //System.out.println(Color.valueOf("blue")); //这里报错,原因是必须是枚举元素的字符串

       //可以比较两个枚举对象在枚举中的顺序,其中返回值:-1表示之前 0表示相同位置 1表示之后。

       System.out.println(blue.compareTo(red));  //1

       //依枚举顺序得到对应的索引值,默认以0开始。

       System.out.println(blue.ordinal());       //1

    }

} 

二、带构造函数的枚举

注意:

1.构造器只是在构造枚举值的时候才被调用

2.所有构造器必须私有化,绝对不允许有public构造器,这是为了避免直接对枚举类型实例化。

publicenum Color{

    RED,BLUE("小篮"),YELLOW,GREEN;

    //使用public报错,只能使用private 

    private Color(){

       System.out.println("打印>>"+this);

    }

    private Color(String name){

       System.out.println(name+"打印>>"+this);

    }
}

类加载的时候,打印结果:

打印>>RED

小篮打印>>BLUE

打印>>YELLOW

打印>>GREEN

 

三、抽象枚举类

注意:一个抽象枚举类,不需要在class前面加abstract抽象修饰
步骤:
1.定义的abstract方法,但是方法必须放在枚举元素的下面
2.在每个枚举元素成员中使用匿名内部类,进行abstract方法的实现。

publicenum Color{

    //这里需要注意的是每个元素都要对抽象方法进行实现,不然编译报错

    RED{

       //对abstract方法实现

       publicvoid printName(){

           System.out.println("颜色是:red");

       }

    },

    BLUE{

       publicvoid printName(){

           System.out.println("颜色是:blue");

       }

    },

    YELLOW{

       publicvoid printName(){

           System.out.println("颜色是:yellow");

       }

    },

    GREEN{

       publicvoid printName(){

           System.out.println("颜色是:green");

       }

    };

    //抽象方法

    publicabstractvoid printName();

}

那么根据上面,我们思考下,那么对应接口类呢,该怎么结合枚举处理?

步骤:

1、 定义的interface

2、在枚举类里implements 接口类

3、在每个枚举元素成员中使用匿名内部类,实现接口提供的所有方法。

实例:

interface Masterplate{

    publicvoid printName();

}

 publicenum Color implements Masterplate{

    RED{

       publicvoid printName(){

           System.out.println("颜色是:red");

       }

    },

    BLUE{

       publicvoid printName(){

           System.out.println("颜色是:blue");

       }

    },

    YELLOW{

       publicvoid printName(){

           System.out.println("颜色是:yellow");

       }

    },

    GREEN{

       publicvoid printName(){

           System.out.println("颜色是:green");

       }

    };

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值