详解JAVA枚举类

目录

1.概述

2.常用API 

2.1.清单

2.2.代码示例

2.2.1.ordinal

2.2.2.compareTo

2.2.3.toString

2.2.4.valueOf

2.2.5.values

3.成员变量和带参构造


1.概述

枚举变量指的是变量的取值只在一个有限的集合内,如性别、星期几、颜色等。从JDK5开始,JAVA支持了枚举类型。

  • 使用enum关键字声明枚举类型
  • 枚举类可以理解为一个集合,enum内部有多少个值,就有多少个实例对象。
  • 枚举类不能直接new,而是由JVM加载枚举类的时候自动创建枚举类内部的示例。
  • 枚举内部的每个实例都是全局唯一的。
  • 枚举类构造方法只能为private

代码示例:

枚举类:

public enum Size {
    SMALL,MEDIUM,LARGE,EXTRA_LARGE
}

测试:

public class test {
    public static void main(String[] args) {
        Size s1=Size.SMALL;
        Size s2=Size.SMALL;
        Size s3=Size.LARGE;

        System.out.println(s1==s2);
        System.out.println(s1==s3);
    }
}

测试结果:

2.常用API 

2.1.清单

所有enum类型都是Enum的子类,继承了Enum的方法,具有以下API:

ordinal 返回枚举值所在的索引位置,从0开始
compareTo 比较两个枚举值的索引位置大小,返回自己的索引比被比较者大多少
toString 返回枚举值的字符串表示
valueOf 将字符串初始化为枚举对象
values 返回所有的枚举值

2.2.代码示例

2.2.1.ordinal

public static void main(String[] args) {
        System.out.println(Size.SMALL.ordinal());
        System.out.println(Size.MEDIUM.ordinal());
        System.out.println(Size.LARGE.ordinal());
        System.out.println(Size.EXTRA_LARGE .ordinal());
    }
}

2.2.2.compareTo

 public static void main(String[] args) {
        System.out.println(Size.SMALL.compareTo(Size.MEDIUM));
    }

2.2.3.toString

public static void main(String[] args) {
        System.out.println(Size.SMALL.toString().equals("SMALL"));
    }

2.2.4.valueOf

valueOf存在方法重载:

public static void main(String[] args) {
        System.out.println(Size.valueOf("SMALL")==Size.SMALL);
        System.out.println(Enum.valueOf(Size.class,"SMALL")==Size.SMALL);
    }

2.2.5.values

public static void main(String[] args) {
    for (Size value : Size.values()) {
        System.out.println(value);
    }
}

3.成员变量和带参构造

有时候我们用枚举类的时候不只希望它能表示一种类型,还希望它能携带一些信息,这时候就需要枚举类有自己的成员变量和带参构造。

比如使用枚举类来表示HTTP请求的结果,我们希望它除了表示成功失败,还能带有状态码。

public enum HttpResult {
    //注意:成员实例只能写在开头,这是强制规定,否则会报错
    SUCCESS(200),FAIL(500);
    private int code;
    private HttpResult(int code){
        this.code=code;
    }

    public int getCode() {
        return code;
    }
}

猜你喜欢

转载自blog.csdn.net/Joker_ZJN/article/details/129399382
今日推荐