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 = dinal();
System.out.println(rank);//0
System.out.println(dinal());//1
System.out.println(dinal());//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() {
enum c++     return age;
}
由于字段是常量,因此⽆法⽤set⽅法,更改字段的值
int aAge = Age();
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语句中。