Java学习笔记(44)——Java枚举

本文详细介绍了枚举在Java中的多种应用,包括枚举的基本语法、构造函数、抽象方法、实现接口、常用方法等,并通过实例展示了枚举在实际编程中的灵活运用。此外,还探讨了如何覆盖枚举的方法以及让相同枚举类型下的枚举值具有不同的行为,提供了深入理解枚举特性的实用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、枚举在Switch中的应用

public enum MyColor{
   //每个枚举值用逗号隔开,
   RED,
   BLUE,
   GREEN;//最后的分号可要或不要
}
public class Test1{
    public static void main(String[] args){
        MyColor myColor = MyColor.RED;
        switch(myColor){
            case BLUE://这里就可以直接使用枚举值
                System.out.println("蓝色");
                break;
            case GREEN:
                System.out.println("绿色");
                break;
            case RED:
                System.out.println("红色");
                break;
            default:
                System.out.println("什么色?");
                break;    
        }
    }
}

二、枚举的构造函数

enum MyColor{
  RED("Hot", 4), BLUE("SAD",8);
  
  private String mood;
  public String getMood{
    return mood;
  }
  private int index;
  public int getIndex(){
    return index;
  }
  private MyColor(String mood, int index){
    this.mood = mood;
    this.index = index;
  }
}
System.out.println(MyColor.RED.getMood());

枚举成员均要实现构造函数

三、枚举的抽象方法

/**
    * 订单状态
    * 
    * 实现带有抽象方法的枚举
    * 
    * @author wang
    *
    */
    public enum OrderState {
        /** 已取消 */
        CANCEL {public String getName(){return "已取消";}},
        /** 待审核 */
        WAITCONFIRM {public String getName(){return "待审核";}},
        /** 等待付款 */
        WAITPAYMENT {public String getName(){return "等待付款";}},
        /** 正在配货 */
        ADMEASUREPRODUCT {public String getName(){return "正在配货";}},
        /** 等待发货 */
        WAITDELIVER {public String getName(){return "等待发货";}},
        /** 已发货 */
        DELIVERED {public String getName(){return "已发货";}},
        /** 已收货 */
        RECEIVED {public String getName(){return "已收货";}};
        
        public abstract String getName();
    }

枚举成员均要实现抽象方法

四、枚举实现接口

package yuki.core.enumeration.interfaces;

import java.util.Arrays;
import java.util.List;

public class PlanetTest {
    
    private interface Move{
        void move();
    };
    
    private enum Planet implements Move{
        SOLAR, 
        EARTH{
            @Override
            public void move() {
                System.out.println("rounding...center:" + SOLAR);
            }
        }, 
        MOON{
            @Override
            public void move() {
                System.out.println("rounding...center:" + EARTH);
            }
        };
        
        @Override
        public void move() {
            System.out.println("rounding...");
        }
    }

    public static void main(String[] args) {
        
        List<Planet> planets = Arrays.asList(Planet.values());
        for(Planet planet : planets){
            System.out.print(planet + " : ");
            planet.move();
        }
    }

}
SOLAR : rounding...
EARTH : rounding...center:SOLAR
MOON : rounding...center:EARTH

枚举成员均要实现接口方法,可单独实现,亦可统一实现~

五、枚举常用方法

int compareTo(E o) 
          比较此枚举与指定对象的顺序。

Class<E> getDeclaringClass() 
          返回与此枚举常量的枚举类型相对应的 Class 对象。

String name() 
          返回此枚举常量的名称,在其枚举声明中对其进行声明。

int ordinal() 
          返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

String toString()

           返回枚举常量的名称,它包含在声明中。

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

六、EnumSet,EnumMap 的应用

public class Test {
    public static void main(String[] args) {
        // EnumSet的使用
        EnumSet<EnumTest> weekSet = EnumSet.allOf(EnumTest.class);
        for (EnumTest day : weekSet) {
            System.out.println(day);
        }
 
        // EnumMap的使用
        EnumMap<EnumTest, String> weekMap = new EnumMap(EnumTest.class);
        weekMap.put(EnumTest.MON, "星期一");
        weekMap.put(EnumTest.TUE, "星期二");
        // ... ...
        for (Iterator<Entry<EnumTest, String>> iter = weekMap.entrySet().iterator(); iter.hasNext();) {
            Entry<EnumTest, String> entry = iter.next();
            System.out.println(entry.getKey().name() + ":" + entry.getValue());
        }
    }
}

七、覆盖枚举的方法

public enum Color {  
    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);  
    // 成员变量  
    private String name;  
    private int index;  
    // 构造方法  
    private Color(String name, int index) {  
        this.name = name;  
        this.index = index;  
    }  
    //覆盖方法  
    @Override  
    public String toString() {  
        return this.index+"_"+this.name;  
    }  
}

八、让相同枚举类型下的枚举值具有不同的行为--重写枚举值的方法

public enum MyColor{
  RED, BLUE(){
     @Override
     public boolean getFlag(){
       return false;
     }
  };
  public boolean getFlag(){
    return true;
  }
}
// 调用
System.out.println(MyColor.RED.getFlag()); // 显示true
System.out.println(MyColor.BLUE.getFlag()); // 显示false


转载于:https://my.oschina.net/jewill/blog/412247

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值