java枚举类Enum

Java枚举类Enum简介:
1、特征:
(1)它不能有public或protected的构造函数,这样保证了用户不能创建一个新enum实例;
(2)所有枚举值都是public,static,final的,这一点只是针对于枚举值,可以和在普通类里面定义变量一样定义其任何类型的非枚举变量,这些变量可以用任何修饰符;
(3)Enum默认实现了java.lang.Comparable接口;
(4)Enum覆盖了toString()方法,因此我们如果调用Color.Blue.toString()默认返回字符串"Blue";
(5)Enum提供了一个valueOf方法,这个方法和toString方法是相对的,调用valueOf("Blue")将返回Color.Blue,因此在重写toString方法的时候一般相对应的重写valueOf方法;
(6)Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值;
(7)Enum还提供了一个ordinal的方法,这个方法返回枚举值在枚举类中的顺序,这个顺序根据枚举值声明的顺序而定,这里的Color.Red.ordinal()返回0,默认从0开始;


2、用法:
(1)常量:
public enum Color{
RED,GREEN,BLANK,YELLOW
}
(2)switch
enum Signal{
GREEN,YELLOW,RED
}
public class Trafficlight{
Signal color = Signal.RED;
public void change(){
switch(color){
case RED: color=Signal.GREEN;break;
case YELLOW:color=Signal.RED;break;
case GREEN:color=Signal.YELLOW;break;
}
}
}
(3)像枚举中添加新的方法:如果定义自己的方法,则需要在enum实例序列的最后一个添加一个分号,而且enum实例必须先定义;
public enum Color{
RED("红色",1),GREEN("绿色",2),BLANK("白色",3),YELLOW("黄色",4);
//成员变量
private String name;
private int index;
//构造方法
Color(String name,int index){
this.name=name;
this.index =index;
}
//普通方法
public static String getName(int index){
for(Color c:Color.values()){
if(c.getIndex()==index){
return c.name;
}
}
return null;
}
//get set方法
public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public int getIndex() {
return index;
}


public void setIndex(int index) {
this.index = index;
}
}

(4)覆盖枚举的方法:仅以toString()为例
public class Test{
public enum Color{
RED("红色",1),GREEN("绿色",2),BLANK("白色",3),YELLOW("黄色",4);
//成员变量
private String name;
private int index;
//构造方法
private Color(String name,int index){
this.name = name;
this.index = index;
}
//覆盖方法
public String toString(){
return this.index +"_"+this.name;
}
}
public static void main(String[] args){
System.out.println(Color.RED.toString());
}
}

(5)实现接口:由于所有枚举都继承java.lang.Enum类,故枚举不能再继承其他类(Java单一继承)
public interface Behaviour{
void print();
String getInfo();
}

public enum Color implements Behaviour{
RED("红色",1),GREEN("绿色",2),BLANK("白色",3),YELLOW("黄色",4);
//成员变量
private String name;
private int index;
//构造方法
private Color(String name,int index){
this.name = name;
this.index = index;
}
//接口方法
@Override
public String getInfo(){
return this.name;
}
@Override
public void print(){
System.out.println(this.index+"_"+this.name);
}
}

(6)使用接口组织枚举
public interface Food{
enum Coffee implements Food{
BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
}
enum Dessert implements Food{
FRUIT,CAKE,GELATO
}
}

(7)枚举集合使用:

java.util.EnumSet和java.util.EnumMap,Enum.Set保证集合中的元素不重复,EnumMap中的key是enum类型,而value可以是任意类型;

3、valueOf使用注意事项
valueOf是将String转为Enum实例,存在如果String不存在的情况,Enum为了不产生空枚举对象,则抛出无效参数异常(IllegalArgumentException),为了避免异常报错,我们 可以对枚举进行扩展,如下实例:
enum Season{
Spring,Summer,Autumn,Winter;
//是否包含指定名称的枚举项
public static boolen contains(String name){
//所有枚举值
Season[] season = values();
//遍历查找
for(Season s: season){
if(s.name().equals(name)){
return true;
}
}
return false;
}
}



参考:https://www.cnblogs.com/toSeeMyDream/p/5825486.html

         https://www.jianshu.com/p/b49b8d02f5c5

        https://www.cnblogs.com/DreamDrive/p/5632706.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值