java常量类的实现该如何编写?

TheDisguiser 2020-08-31 21:59:47 java常见问答 7356

除了常量池,java中还有常量类,那么,常量类是做什么用的呢?小伙伴们知道吗?本篇文章就来听小编讲解讲解。

类常量

代码:

public class ResponseCode
{
    /** 系统处理正常 */
    public static final int SUCCESS_HEAD = 0;
    /** 系统处理未知异常 */
    public static final int EXCEPTION_HEAD = 1;
    /** JSON解析错误 */
    public static final int JSON_RESOLVE = 2;
    /** 类型不匹配 */
    public static final int TRANSTYPE_NO = 3;
    /** Head - messageID未赋值 */
    public static final int HEAD_messageID = 4;
    /** Head - timeStamp未赋值 */
    public static final int HEAD_timeStamp = 5;
    /** Head - messengerID未赋值 */
    public static final int HEAD_messengerID = 6;
    /** Head - transactionType 未赋值 */
    public static final int HEAD_transactionType = 7;
    /** digest校验不通过 */
    public static final int HEAD_DIGEST = 8;
    /** src校验不通过 */
    public static final int HEAD_SRC_NULL = 10;
    /** 协议包含非法字符 */
    public static final int ILLEGAL_MESSAGE = 11;
    /** 数据库异常 */
    public static final int DATABASE_EXCEPTION = 9;
    public static final Map < Integer, String > RESP_INFO = new HashMap < Integer, String > ();
    static
    {
        // Head 相关
        RESP_INFO.put(SUCCESS_HEAD, "系统处理正常");
        RESP_INFO.put(EXCEPTION_HEAD, "系统处理未知异常");
        RESP_INFO.put(JSON_RESOLVE, "JSON解析错误");
        RESP_INFO.put(TRANSTYPE_NO, "类型不匹配");
        RESP_INFO.put(HEAD_messageID, "messageID未赋值");
        RESP_INFO.put(HEAD_timeStamp, "timeStamp未赋值");
        RESP_INFO.put(HEAD_messengerID, "messengerID未赋值");
        RESP_INFO.put(HEAD_transactionType, "transactionType未赋值");
        RESP_INFO.put(HEAD_DIGEST, "digest校验不通过");
        RESP_INFO.put(DATABASE_EXCEPTION, "数据库异常");
        RESP_INFO.put(HEAD_SRC_NULL, "src未赋值");
        RESP_INFO.put(ILLEGAL_MESSAGE, "协议包含非法字符");
    }
}

枚举

所有的枚举类都是Enum类的子类,所以可以使用枚举类调用Enum的方法。

代码:

public enum Season
{
    SPRING
    , SUMMER
    , AUTUMN
    , WINTER
}

应用:可以直接使用属性,也可以调用Enum的方法如values方法

System.out.println(Season.AUTUMN);
System.out.println(Season.values());
Season[] values = Season.values();
System.out.println(values[0]);

我们可以在枚举类中添加一些构造器、方法和域:

私有化构造器,构造器只是在构造枚举常量的时候被调用如SMALL(“S”)

/**
 * 衣服尺寸
 */
public enum Size
{
    SMALL("S")
        , MEDIUM("M")
        , LARGE("L")
        , EXTRA_LARGE("XL");
    /**
     * 缩写
     */
    private String suoxie;
    private Size(String suoxie)
    {
        this.suoxie = suoxie;
    }
    public String getSuoxie()
    {
        return suoxie;
    }
    public static void main(String[] args)
    {
        //1:toString()方法返回常量的名 
        System.out.println(Size.SMALL.toString()); //SMALL
        //2:valueOf()
        System.out.println(Size.valueOf("LARGE"));
        //3:values:返回每个常量名
        //SMALL MEDIUM LARGE EXTRA_LARGE
        Size[] sizes = Size.values();
        /*for (Size size : sizes) {
            System.out.println(size);
        }*/
        //4:ordinal 返回常量的位置,从0开始
        System.out.println(Size.LARGE.ordinal());
        int i = Size.EXTRA_LARGE.compareTo(Size.EXTRA_LARGE);
        System.out.println(i);
        System.out.println(Size.LARGE.getSuoxie());
    }
}

以上就是本篇文章的所有内容,如果想了解更多编程相关常见问题的话,就快请关注本网站吧。

推荐阅读:

java常量池是什么?要如何实现?

java常量定义有哪些方法?如何实现?

java常量应用在哪里?该怎么实现?