详解:枚举类
枚举类(Enum)是一种特殊的类,用于定义一组固定的常量。在Java中,枚举类使用enum
关键字来定义。
特点:
-
枚举类的每个实例都是唯一的,且在编译时确定。
-
枚举类的实例可以直接通过类名访问,不需要创建实例。(因为实例对象是 public final static 修饰的)
-
枚举类可以有自己的方法和构造器。
-
枚举类默认继承自
java.lang.Enum
类,因此具有一些内置的方法,如toString()
,ordinal()
,compareTo()
等。(注意:因为枚举类隐式地继承了java.lang.Enum
类所以他不能继承其他类(单继承),但可以实现接口)
一、自定义枚举类:
步骤:
(1)构造器私有化
解释:不能从外部类直接创建枚举实例对象
(2)在本类内部创建对象并且对外暴露对象(创建对象用 public final static 修饰)
(4)可以提供 get 方法,但是不能提供 set 方法
解释:防止外部类直接对枚举类的属性进行修改
代码演示:(输出一年的季节)
public class Season {
private String name;
public final static Season season1 = new Season("春天");
public final static Season season2 = new Season("夏天");
public final static Season season3 = new Season("秋天");
public final static Season season4 = new Season("冬天");
private Season(String name){
this.name=name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
'}';
}
}
class Test{
public static void main(String[] args) {
System.out.println(Season.season1);
System.out.println(Season.season2);
System.out.println(Season.season3);
System.out.println(Season.season4);
}
}
结果如下:
Season{name='春天'}
Season{name='夏天'}
Season{name='秋天'}
Season{name='冬天'}
二、使用enum
关键字来定义
修改步骤:
(1)使用关键字 enum 替代 class
(2)public static final Season season1 = new Season("春天")直接用 SPRING("春天")代替 ,SPRING是常量名,括号是实参列表(即调用的构造器)
(3)如果有多个常量(对象),使用“,”号间隔即可
(4)如果使用enum来实现枚举,要求将定义常量对象写在最前面
修改后的代码:
public enum Season {
SPRING("春天"),SUMMER("夏天"), AUTUMN("秋天"),WINTER("冬天");
private String name;
Season(String name){
this.name=name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
'}';
}
}
class Test{
public static void main(String[] args) {
System.out.println(Season.SPRING);
System.out.println(Season.SUMMER);
System.out.println(Season.AUTUMN);
System.out.println(Season.WINTER);
}
}
结果和上面一样
解释
-
枚举常量的定义:
- 在枚举类中,枚举常量(如SPRING,SUMMER等)被自动声明为
public static final
的实例。 - 每个枚举常量都是枚举类的一个唯一实例。(因为有final修饰)
- 在枚举类中,枚举常量(如SPRING,SUMMER等)被自动声明为
-
枚举类的属性和方法:
- 枚举类可以包含属性、方法和构造函数。
- 属性可以是实例变量,用于存储每个枚举常量的特定信息(如上面的name属性)。
- 方法可以是实例方法,用于提供枚举常量的行为(如上面的to
String
方法)。
-
枚举类的构造函数:
- 枚举类的构造函数默认是私有的,这意味着你不能从外部类直接创建枚举实例。
- 枚举常量是在枚举类被加载时自动实例化的,因此每个枚举常量都是单例的。
-
遍历枚举常量:
- 可以使用
values()
方法遍历枚举类的所有常量。
- 可以使用
-
使用枚举类:
- 在代码中,可以通过枚举类名直接访问枚举常量。
- 可以调用枚举常量的方法和属性。