Java基础-枚举

java 1.5引入的一个新特性,其本质是一个final修饰的类,继承自Enum,不可被继承。

特点

  1. 枚举类用关键字enum修改,本质是类
  2. 定义的枚举类继承自java.lang.Enum,且无法被继承
  3. 私有的构造方法,不能通过new直接创建实例,只能定义出实例
  4. 枚举类中写的都是成员变量,被final和static修改,默认的,不用写
  5. 枚举类是一种引用类型,引用类型通常用equals()比较,但枚举类例外,既可以用equals(),也可以使用 ==。这是因为枚举类型的每一个常量在JVM中只有一个唯一的实例,可以直接用 == 比较。
  6. 可以将enum类型用于switch语句

枚举类

定义一个枚举类,如下

public enum Number {
  ONE,TWO,THREE;
}

编译器编译处的class类似下面这样

public class Number{
  public static final Number ONE = new Number();
  public static final Number TWO = new Number();
  public static final Number THREE = new Number();
  private Number(){}
}

默认方法

name()

返回常量名称,不可重写。例如:

String str = Number.ONE.name(); // 'ONE'

ordinal()

返回定义的常量的顺序,从0开始计数。改变枚举常量定义的顺序会导致ordinal()返回值的变化。例如:

int n = Number.ONE.ordinal(); // 0

toString()

返回常量名称,可被重写。例如:

public enum Number {
  ONE,TWO,THREE;
  @Override
  public String toString() {
    return "NONE";
  }
}
// 重写前
String str = Number.ONE.toString(); // 'ONE'
// 重写后
String str = Number.ONE.toString(); // 'NONE'

构造方法

枚举类可以定义私有的构造方法,可以通过定义构造方法来为每个定义实例增加别名。

public enum Number {
    ONE(1),TWO(2),THREE(3); // 枚举类常量,定义的实例
    public int value; //枚举类的字段,可final修饰,也可不用
    private Number(int value){
        this.value = value;
    }
    public static void main(String[] args) {
        int num = Number.ONE.value;
        System.out.println("value = " + num);
    }
}
// 输出:value = 1

switch应用

public static void main(String[] args){
    Number item = Number.ONE;
    switch(item){
      case ONE:
        System.err.println(Number.ONE.value);
        break;
      case TWO:
        System.err.println(Number.TWO.value);
        break;
      case THREE:
        System.err.println(Number.THREE.value);
        break;
      default:
        System.err.println("NONE");
}
// 输出:value = 1
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容