一、基本形式
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