Java枚举是一个特殊的类,常用来表示一组常量,像季节、星期、月份。用enum关键字来定义,各个变量之间用逗号来分隔。也可以自定义类实现枚举。
枚举常量一般要大写。
方式一 使用enum关键字
public class Enum_01 {
public static void main(String[] args) {
Color c1 = Color.green;
System.out.println(c1);
}
}
enum Color{
red,blue,green,blank
}
green
Process finished with exit code 0
枚举也可以声明在内部类中
public class Enum_02 {
public static void main(String[] args) {
Color c1 = Color.RED;
System.out.println(c1);
}
public enum Color{
RED,GREEN,BLUE
}
}
可以使用增强for循环来遍历枚举元素。
public class Enum_03 {
public static void main(String[] args) {
for (Date myDate : Date.values()){
System.out.println(myDate);
}
}
}
enum Date{
Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
}
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
Process finished with exit code 0
public class Enum_03 {
public static void main(String[] args) {
for (Date myDate : Date.values()){
System.out.println(myDate + "at index " +myDate.ordinal());
}
}
}
enum Date{
Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
}
Mondayat index 0
Tuesdayat index 1
Wednesdayat index 2
Thursdayat index 3
Fridayat index 4
Saturdayat index 5
Sundayat index 6
Process finished with exit code 0
public class Enum_02 {
public static void main(String[] args) {
Color c1 = Color.RED;
System.out.println(c1);
}
public enum Color{
//注意中间用逗号隔开,并且要求将常量对象放在最前面。
RED("red","123"),GREEN("green","456");
private String color;
private String number;
Color(String color, String number) {
this.color = color;
this.number = number;
}
@Override
public String toString() {
return "Color{" +
"color='" + color + '\'' +
", number='" + number + '\'' +
'}';
}
}
}
Color{color='red', number='123'}
Process finished with exit code 0
方式二 自定义类实现枚举
/**
* @auther
*/
public class Enum_04 {
public static void main(String[] args) {
System.out.println(Season.AUTUMN);
}
}
class Season{
//1、将构造器私有化 目的是防止直接new
// 2、去掉set相关的方法 只能读,不能修改
//3、在Season类内部,创建固定的对象
//4、可以加入final修饰符
private String name;
private String desc;
public final static Season SPRING = new Season("春天","温暖");
public final static Season SUMMER = new Season("夏天","炎热");
public final static Season AUTUMN = new Season("秋天","凉爽");
public final static Season WINTER = new Season("冬天","寒冷");
private Season(String name, String desc) {
this.name = name;
this.desc = desc;
}
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
Season{name='秋天', desc='凉爽'}
Process finished with exit code 0
PS : 补充
由Java文件 javac编译成class文件。由class文件 通过javap反编译成Java文件。
枚举常用方法
values() 返回枚举类中所有的值。
ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。
valueOf()方法返回指定字符串值的枚举常量
public class Enum_02 {
public static void main(String[] args) {
Season autumn = Season.AUTUMN;
//输出枚举对象的名字
System.out.println(autumn.name());
//输出的是该枚举对象的次序,从0开始编号
System.out.println(autumn.ordinal() );
//values返回一个数组 含有所有枚举对象 使用增强for循环实现
for (Season season:Season.values()){
System.out.println(season);
}
//valueOf是将字符串转换成枚举对象
Season s1 = Season.valueOf("AUTUMN");
System.out.println(s1);
//compareTo比较两个枚举常量 比较的是编号 用前一个的编号减去后面一个的编号 0-1=-1
System.out.println(Season.SPRING.compareTo(Season.SUMMER));
}
public enum Season{
//注意中间用逗号隔开,并且要求将常量对象放在最前面。
SPRING("春天","温暖"),SUMMER("夏天","炎热"),AUTUMN("秋天","凉爽"),WINTER("冬天","寒冷");
private String season;
private String desc;
Season (String season, String desc) {
this.season = season;
this.desc = desc;
}
@Override
public String toString() {
return "Season{" +
"season='" + season + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
}
AUTUMN
2
Season{season='春天', desc='温暖'}
Season{season='夏天', desc='炎热'}
Season{season='秋天', desc='凉爽'}
Season{season='冬天', desc='寒冷'}
Season{season='秋天', desc='凉爽'}
-1
Process finished with exit code 0
注意:使用enum关键字后,就不能再继承其他的类了,因为会隐式继承Enum类,但是还是可以实现接口的。