JDK5新特性:枚举(Enum)

一、枚举的概述。

枚举,是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。举例:一周只有7天,一年只有12个月等。

回想单例设计模式:单例类是一个类只有一个实例

那么多例类就是一个类有多个实例,但不是无限个数的实例,而是有限个数的实例。这才能是枚举类。

二、枚举类的常用方法。

  • int compareTo(E o)
    比较此枚举与指定对象的顺序。
  • String name()
    返回此枚举常量的名称,在其枚举声明中对其进行声明。
  • int ordinal()
    返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
  • String toString()
    返回枚举常量的名称,它包含在声明中。
  • T valueOf(Class type,String name)
    返回带指定名称的指定枚举类型的枚举常量。
  • values()
    此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便。

三、枚举的使用。

package com.hkddy8.demo1;

/*
 * 手动定义枚举类
 */
public class EunmDemo {
    public static void main(String[] args) {
    //测试
        Lamp l1 = Lamp.RED;
        System.out.println(l1);
        Lamp l2 = Lamp.GREEN;
        System.out.println(l2);
        Lamp l3 = Lamp.YELLW;
        System.out.println(l3);
    // 打印的都是地址值
    }
}

class Lamp{
    // 私有化构造方法让外界不能无限的去创建对象
    private Lamp(){}

    // 创建几个实例,用于创建对象
    public static final Lamp RED = new Lamp();
    public static final Lamp GREEN = new Lamp();
    public static final Lamp YELLW = new Lamp();

}

由于自己定义一个枚举类,比较麻烦,所以java就提供了枚举类供我们使用。

java.lang包下的 Enum类

格式是:只有枚举项的枚举类
public enum 枚举类名 {
枚举项1,枚举项2,枚举项3…;
}

代码体现:

public enum TrafficLamp {
    // 枚举项
    RED, GREEN, YELLW;
}
// 测试类
public class TrafficLampTest {
    public static void main(String[] args) {
        TrafficLamp t1 = TrafficLamp.RED;
        System.out.println(t1);
        TrafficLamp t2 = TrafficLamp.GREEN;
        System.out.println(t2);
        TrafficLamp t3 = TrafficLamp.YELLW;
        System.out.println(t3);
        // 打印的是枚举项常量的名称,说明Enum类重写了toString方法
    }
}

带参构造的使用:

public enum TrafficLamp {
    // 枚举项
    RED(30), GREEN(40), YELLW(5);

    private int time;

    // 提供带参构造
    private TrafficLamp(int time){
        this.time = time;
    }

    public int getTime(){
        return time;
    }
// 测试类
public class TrafficLampTest {
    public static void main(String[] args) {
        TrafficLamp t1 = TrafficLamp.RED;
        System.out.println(t1);
        System.out.println(t1.getTime());

        TrafficLamp t2 = TrafficLamp.GREEN;
        System.out.println(t2);
        System.out.println(t2.getTime());

        TrafficLamp t3 = TrafficLamp.YELLW;
        System.out.println(t3);
        System.out.println(t3.getTime());
    }
}

抽象方法的使用:


public enum TrafficLamp {
    // 枚举项
    RED(30) {
        @Override
        public TrafficLamp nextLamp() {
            return TrafficLamp.GREEN;
        }
    }, GREEN(40) {
        @Override
        public TrafficLamp nextLamp() {
            return TrafficLamp.YELLW;
        }
    }, YELLW(5) {
        @Override
        public TrafficLamp nextLamp() {
            return TrafficLamp.RED;
        }
    };

    private int time;

    // 提供带参构造
    private TrafficLamp(int time){
        this.time = time;
    }

    public int getTime(){
        return time;
    }

    // 提供一个抽象方法,用于获取下个灯
    public abstract TrafficLamp nextLamp();

}

// 测试类
public class TrafficLampTest {
    public static void main(String[] args) {
        TrafficLamp t1 = TrafficLamp.RED;
        // 调用方法
        TrafficLamp l1 = t1.nextLamp();
        System.out.println(l1);

        TrafficLamp t2 = TrafficLamp.GREEN;
        // 调用方法
        TrafficLamp l2 = t2.nextLamp();
        System.out.println(l2);

        TrafficLamp t3 = TrafficLamp.YELLW;
        // 调用方法
        TrafficLamp l3 = t3.nextLamp();
        System.out.println(l3);

        //打印结果
        //  GREEN
        //  YELLW
        //  RED

    }
}

四、使用枚举的注意事项。

  • 定义枚举类要用关键字enum

  • 所有枚举类都是Enum的子类

  • 枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略

  • 枚举类可以有构造器,但必须是private的,它默认的也是private的。枚举项的用法比较特殊:枚举(“”);

  • 枚举类也可以有抽象方法,但是枚举项必须重写该方法

  • 枚举在switch语句中的使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值