Java类常量、接口常量、枚举类

141 阅读2分钟

在枚举类之前,定义常量可以在类中定义,也可以在接口中定义。

类常量

在类中定义一组常量:

public class SeasonConst {
    public static final int SPRING = 1;
    public static final int SUMMER = 2;
    public static final int AUTUMN = 3;
    public static final int WINTER = 4;
}

接口常量

在接口中,属性都是以public static final修饰。
在接口中定义一组常量:

public interface SeasonConst {
    int SPRING = 1;
    int SUMMER = 2;
    int AUTUMN = 3;
    int WINTER = 4;
}
//在接口中,属性都是以public static final修饰

从类常量与接口常量定义上来看,显然接口常量更加简洁;
此外接口中还可以再定义接口,使得有同一类型关系的常量划分为一组。

public interface Const {
    interface Season {
        int SPRING = 1;
        int SUMMER = 2;
        int AUTUMN = 3;
        int WINTER = 4;
    }
    interface Week {
        int MONDAY = 1;
        int SUNDAY = 7;
    }
}
//可以直接调用Const.Season.SPRING获得值

接口常量在定义与使用十分方便,但不适用于在有实现类的时候这样使用,
如果有定义的实现类,那么也就是实现了这个接口的所有常量,无论是否在实现类中使用到,都是违背Java的封装性的。

枚举类

在JDK1.5之前没有枚举类,那之前一般使用接口常量代替;而现在Java枚举类可以更贴近地表示常量。

public enum Season {
    SPRING,
    SUMMER,
    AUTUNM,
    WINTER;
}

枚举类中的枚举成员都可以看作是这个enum枚举类的实例,这些枚举类默认都被public static final修饰;成员之间用逗号分隔,分号语句结束。
枚举类的调用通过枚举类型名直接引用,如Season.SPRING

Season season = Season.SPRING;

自定义枚举类型

按照数字1代表SPRING,2代表SUMMER,3代表AUTUMN,4代表WINTER。

public enum Season {
    SPRING(1),
    SUMMER(2),
    AUTUMN(3),
    WINTER(4);

    private int i;
    private Season(int i) {
        this.i = i;
    }
}
//自定义枚举类型时,必须先定义枚举实例
//枚举类构造方法是私有的,结构对应枚举实例

枚举类提供的方法

values(),以数组形式返回枚举类的所有成员。
valueOf(),将普通字符串转换为枚举实例。
compareTo(),比较两个枚举成员在定义时的顺序。
ordinal(),获取枚举成员的索引位置。

Season[] seasons = Season.values();
Season season = Season.valueOf("SPRING");