4.枚举类的基本使用

目录

1.什么是枚举

2.定义格式

3.枚举类主要方法

4.实现接口的枚举类

5.枚举类注意事项


1.什么是枚举

  • JDK1.5引入了新的类型——枚举。
  • 在JDK1.5 之前,我们定义常量都是: public static fianl.... 。很难管理。
  • 枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。 用于定义有限数量的一组同类常量,
  • 例如:
    • 错误级别: 低、中、高、急
    • 一年的四季: 春、夏、秋、冬
    • 商品的类型: 美妆、手机、电脑、男装、女装...
  • 在枚举类型中定义的常量是该枚举类型的实例
  • 比如线程的状态类Thread.State就是枚举类型,6个状态常量就是该类实例。

2.定义格式

权限修饰符 enum 枚举名称 {

  实例1,实例2,实例3,实例4;

}

jdk1.5前是这样模拟枚举类型

package demo;

/**
 * 1.描述级别的枚举类型
 * 枚举:将相关(同一种类型)的常量分组到一个枚举类型Level中
 *  jdk1.5前没有枚举类型时是这样描述的:
 * 下面定义枚举类型Level和3个级别常量(实例)
 */
public class Level {

    //3.定义公开的级别类型(向外界暴露),级别类型是在本类中创建的(Level()被封装了)
    public static final Level LOW=new Level(1);
    public static final Level MEDIUM=new Level(50);
    public static final Level HIGH=new Level(100);

    private int levelValue;//1.级别值:描述级别种类

    //2.程序员定好几种级别后,不允许其他人再添加级别种类
    //可以将构造方法私有化(封装)只能在本类由程序员创建级别种类,不让别人创建对象
    private Level(int levelValue){
        this.levelValue=levelValue;
    }

    public int getLevelValue() {
        return levelValue;
    }

    public void setLevelValue(int levelValue) {
        this.levelValue = levelValue;
    }
}

jdk1.5后出现枚举类型

下面是Level1枚举类型,有3个常量

package demo;

/**
 * jdk1.5后出现枚举类型
 */
public enum Level1 {
    //LOW(1)相当于调用构造器创建一个LOW级别,同理
    LOW(1),MEDIUM(50),HIGH(100);
    private int levelValue; //封装属性,私有化

    private Level1(int LevelValue){ //封装构造器,私有化
        this.levelValue=levelValue;
    }

    public int getLevelValue() {  
        return levelValue;
    }

    public void setLevelValue(int levelValue) {
        this.levelValue = levelValue;
    }
}

常用的定义枚举的方式:不给值,直接名称表示级别

package demo;

/**
 * 这样就算是一个枚举类型Level3,里面有三个级别
 */
public enum Level3 {
    LOW,MEDIUM,HIGH;
}

 

3.枚举类主要方法

1.只有toString可以重写。

package demo;

/**
 * 枚举类常用方法
 *
 */
public class Level3Main {
    public static void main(String[] args) {
        //1.比较此枚举与指定对象的顺序(右移为负位)
        System.out.println(Level3.LOW.compareTo(Level3.HIGH));//LOW右移2个位置到HIGH,输出-2
        System.out.println(Level3.LOW.compareTo(Level3.MEDIUM));//-1
        System.out.println(Level3.HIGH.compareTo(Level3.LOW));//左移2,输出2

        //2.String name():获取枚举常量名称,并在枚举声明中进行声明
        System.out.println(Level3.LOW.name());//LOW

        //3.String toString():获取枚举常量名称,它已经包含在声明中
        System.out.println(Level3.LOW.toString());//LOW

        //4.int ordinal():获取枚举常量在声明中的位置,初始序数0
        System.out.println(Level3.HIGH.ordinal());//输出2

        //5.static valueOf(类.class类型,枚举常量),获取指定名称指定枚举类型的枚举常量
        Level3 high = Enum.valueOf(Level3.class, "HIGH");
        System.out.println(high.name());//枚举常量名:HIGH
    }

    //通过switch判断级别
    public static void chose(Level3 level){
        switch (level){
            case LOW:break;
            case HIGH:break;
            case MEDIUM:break;
        }
    }
}

4.实现接口的枚举类

  • 所有枚举都继承自java.lang.Enum类。由于Java 不支持多继承,枚举对象不能再继承其他类,但可以去实现其他接口
  • 每个枚举对象,都可以实现自己的抽象方法

下面是枚举在接口中的使用

package demo;

/**
 * 实现接口的枚举类: 枚举在接口中的使用
 * 任意一个枚举类都继承自Enum,无法再继承其他类,
 * 但可以实现接口,每一个枚举常量都可重写抽象方法定义自己的常量功能等
 */
public enum Level4 implements Lshow{  //定义枚举类型Level4实现Lshow接口
    LOW{           //每一个枚举常量(实例)重写接口抽象方法
        @Override
        public void show(){
            System.out.println("低级别");
        }
    },MEDIUM{
        @Override
        public void show(){
            System.out.println("中级别");
        }
    },HIGH{
        @Override
        public void show(){
            System.out.println("高级别");
        }
    };
}
//定义接口
interface Lshow{
    void show();//抽象方法
}

5.枚举类注意事项

  • 一旦定义了枚举,最好不要妄图修改里面的值,除非修改是必要的。
  • 枚举类默认继承的是java.lang.Enum类而不是Object类
  • 枚举类不能有子类,因为其枚举类默认被final修饰
  • 构造方法只能private,只能程序员自己定义枚举常量
  • switch中使用枚举时,直接使用常量名,不用携带类名
  • 不能定义name属性,因为自带name属性
  • 不要为枚举类中的属性提供set方法,不符合枚举最初设计初衷。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值