简单介绍枚举

在JDK1.5 之前,我们定义常量都是: public static fianl.... 。很难管理。

枚举,其实就是一个放常量 (相关常量) 的类,方便管理常量。

枚举的所有类都继承了Enum这个抽象类

一、创建枚举类

创建一个枚举类:选择Enum即可

创建枚举类型,其中传的参数,都是自己想传进去的,便于更好的的分辨Level对象。(不常见)

public enum Level2 {
    //描述枚举类型 (其实就是创建枚举对象)
    LOW(1),MEDIUM(50),HIGH(100);
    //属性
    private int levelValue;

    private Level2(int levelValue) {  //构造函数
        this.levelValue = levelValue;
    }

    public int getLevelValue() {
        return levelValue;
    }

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

其实如果从字面意思能理解,那这样也是创建枚举类型。(常见)

public enum Level3 {
    LOW,MEDIUM,HIGH;
}

二、枚举类的常用方法

 方法演示:

public static void main(String[] args) {
        //作比较,LOW在HIGH前面两个,应输出-2
        System.out.println(Level3.LOW.compareTo(Level3.HIGH));
        //作比较,HIGH在MEDIUM前面一个,应输出1
        System.out.println(Level3.HIGH.compareTo(Level3.MEDIUM));
        //getname,应输出“MEDIUM”
        System.out.println(Level3.MEDIUM.name());
        //getDeclaringClass()返回对象
        System.out.println(Level3.LOW.getDeclaringClass());
        //返回枚举常量的系数,默认从0开始,HIGH为2
        System.out.println(Level3.HIGH.ordinal());
        //toString()默认返回name,可重写
        System.out.println(Level3.LOW.toString());
    }

最后一个方法为static方法,所以是用类来调用。返回类对象

//传入类,传入名字,返回枚举常量
        Level3 x = Enum.valueOf(Level3.class, "HIGH");
        System.out.println(x.toString());

运行结果:

其实以上这些方法还不是特别常用,最常用的将枚举用在switch语句里:

public static void hh(Level3 l){
        switch (l){
            case LOW:
                System.out.println("我是LOW");
                break;
            case MEDIUM:
                System.out.println("我是MEDIUM");
                break;
            case HIGH:
                System.out.println("我是HIGH");
                break;
        }
    }

 三、枚举接口

枚举对接口的实现有一个特殊的点:每一个枚举对象都可以有自己独特的对接口的实现。

先演示一般对接口的实现: 

eg:先写一个接口

interface lshow{
    void show();
}

枚举类中实现接口:

public enum Level3 implements lshow{
    LOW,MEDIUM,HIGH;

    @Override
    public void show() {
        System.out.println("枚举接口实现成功!");
    }
}

main方法中调用show:

结果:我们发现,不管用HIGH LOW 还是MIDUM调用show 都输出相同内容。那么我们怎么能让他们各自有各自的show实现呢?

 

 我们在枚举中,可以通过在对象后加{}的方法,来逐个实现接口方法:

LOW{
        @Override
        public void show() {
            System.out.println("低级");
        }
    }, MEDIUM {
        @Override
        public void show() {
            System.out.println("中级");
        }
    },HIGH {
        @Override
        public void show() {
            System.out.println("高级");
        }
    }

这样我们再在main中调用show,就有各自的show了。

结果: 

四、枚举的注意事项 

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值