Java中的枚举类

一、基本形式

public enum 类名{A,B,C;}大括号里面为变量名,由于枚举类存放的变量用final修饰为常量,因此变量名大写。

如:

public enum TestNume{
A,B,C;
}

枚举类的每个变量名都可看作:

public static final 类名 变量名 = new 类名();因此用类名.变量名就可以得到一个类的对象。

如:public static final TestNume A = new TestNume();

而且内部私有化枚举类的构造器private 类名() {},如下:

private TestNume(){};

由于枚举类无法通过new来获取对象,因此定义的每个变量实例都是引用类型的唯一实例。

class Test{
public static void main(String[] args) {
TestNume D = new TestNume();
//内部已经私有构造器,因此会报错
}
}

二、常用方法

2.1name()

顾名思义得到变量的名字,如果不重写toString方法,类名.变量名与类名.变量名.name()相等。

public enum TestNume{
A,B,C;

}
class Test{
public static void main(String[] args) {
String name = TestNume.A.name();
System.out.println(name);//A
}
}

2.2ordinal()

返回变量在枚举类的顺序,从0开始

public enum TestNume{
A,B,C;

}
class Test{
public static void main(String[] args) {
int rank = TestNume.A.ordinal();
System.out.println(rank);//0
System.out.println(TestNume.B.ordinal());//1
System.out.println(TestNume.C.ordinal());//2
}
}

三、高级形式

上面的基本形式为枚举的无参构造,下面讲解枚举的有参构造,我们可以定义private的构造方法,并且,给每个枚举常量添加字段,字段的修饰符pubic final不写也会默认,构造器的修饰符private不写,也会走默认,如下所示:

public enum TestNume{
A("a",12),B("b",15),C("c",16);
public final String name;
public final int age;
private TestNume(String name, int age) {
this.name = name;
this.age = age;
}
}

相当于:

public static final TestNume A = new TestNume("a",12);

枚举并没有给获取字段值的方法,我们需要自己写get方法

public String getName() {
return name;
}

public int getAge() {
     return age;
}

由于字段是常量,因此无法用set方法,更改字段的值

int aAge = TestNume.A.getAge();
TestNume.A.setAge(15);
System.out.println(aAge);//12

小结

Java使用enum定义枚举类型,它被编译器编译为final class Xxx extends Enum { … };

通过name()获取常量定义的字符串,注意不要使用toString();

通过ordinal()返回常量定义的顺序(无实质意义);

可以为enum编写构造方法、字段和方法

enum的构造方法要声明为private,字段强烈建议声明为final;

enum适合用在switch语句中。

引用于廖雪峰https://www.liaoxuefeng.com/wiki/1252599548343744/1260473188087424

原文地址:https://www.cnblogs.com/1995stone/p/13623309.html