一. 枚举类
当类的对象是有限个,且是确定的,该类可以称为枚举类; 当需要定义一组常量时,建议使用枚举类;
1. 自定义枚举类
(1)定义属性,类中的属性用private final修饰
(2)私有化类的构造器
(3)提供当前枚举类的多个对象,声明为public static final
public class Test{
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring.toString()); //Season{seasonName='Spring', seasonIntroduction='warm'}
}
}
class Season{
private final String seasonName;
private final String seasonIntroduction;
private Season(String seasonName, String seasonIntroduction){
this.seasonName = seasonName;
this.seasonIntroduction = seasonIntroduction;
}
public static final Season SPRING = new Season("Spring","warm");
public static final Season SUMMER = new Season("Summer","hot");
public static final Season AUTUMN = new Season("Autumn","cool");
public static final Season WINTER = new Season("Winter","cold");
public String getSeasonName() {
return seasonName;
}
public String getSeasonIntroduction() {
return seasonIntroduction;
}
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonIntroduction='" + seasonIntroduction + '\'' +
'}';
}
}
2. 使用enum关键字定义枚举类
(1)提供当前枚举类的对象,多个对象之间用逗号隔开,最后一个对象用分号结束
(2)定义属性,类中的属性用private final修饰
(3)私有化类的构造器
public class Test{
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring.toString()); //SPRING
}
}
enum Season{
SPRING("Spring","warm"),
SUMMER("Summer","hot"),
AUTUMN("Autumn","cool"),
WINTER("Winter","cold");
private final String seasonName;
private final String seasonIntroduction;
private Season(String seasonName, String seasonIntroduction){
this.seasonName = seasonName;
this.seasonIntroduction = seasonIntroduction;
}
public String getSeasonName() {
return seasonName;
}
public String getSeasonIntroduction() {
return seasonIntroduction;
}
}
使用enum关键字定义的枚举类自动继承于Enum类
Enum类中的常用方法 :
(1)values():返回枚举类型的对象数组
(2)valueOf(String objName):返回枚举类中对象名是objName的对象,如果没有对象名是objName的枚举类对象,则会抛异常IllegalArgumentException
(3)toString():返回当前枚举类对象常量的名称
import java.util.Arrays;
public class Test{
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring.toString()); //SPRING
Season[] season = Season.values();
System.out.println(Arrays.toString(season)); //[SPRING, SUMMER, AUTUMN, WINTER]
Season summer = Season.valueOf("SUMMER");
System.out.println(summer); //SUMMER
}
}
enum Season{
SPRING("Spring","warm"),
SUMMER("Summer","hot"),
AUTUMN("Autumn","cool"),
WINTER("Winter","cold");
private final String seasonName;
private final String seasonIntroduction;
private Season(String seasonName, String seasonIntroduction){
this.seasonName = seasonName;
this.seasonIntroduction = seasonIntroduction;
}
public String getSeasonName() {
return seasonName;
}
public String getSeasonIntroduction() {
return seasonIntroduction;
}
}
使用enum关键字定义的枚举类来实现接口
(1)在enum类中实现接口
public class Test{
public static void main(String[] args) {
Season spring = Season.SPRING;
spring.show(); //这是关于季节的枚举类
Season summer = Season.SUMMER;
summer.show(); //这是关于季节的枚举类
}
}
interface Information{
public void show();
}
enum Season implements Information{
SPRING("Spring","warm"),
SUMMER("Summer","hot"),
AUTUMN("Autumn","cool"),
WINTER("Winter","cold");
private final String seasonName;
private final String seasonIntroduction;
private Season(String seasonName, String seasonIntroduction){
this.seasonName = seasonName;
this.seasonIntroduction = seasonIntroduction;
}
public String getSeasonName() {
return seasonName;
}
public String getSeasonIntroduction() {
return seasonIntroduction;
}
@Override
public void show() {
System.out.println("这是关于季节的枚举类");
}
}
(2)让枚举类的对象分别实现接口
public class Test{
public static void main(String[] args) {
Season spring = Season.SPRING;
spring.show(); //春天
Season summer = Season.SUMMER;
summer.show(); //夏天
}
}
interface Information{
public void show();
}
enum Season implements Information{
SPRING("Spring","warm"){
@Override
public void show() {
System.out.println("春天");
}
},
SUMMER("Summer","hot"){
@Override
public void show() {
System.out.println("夏天");
}
},
AUTUMN("Autumn","cool"){
@Override
public void show() {
System.out.println("秋天");
}
},
WINTER("Winter","cold"){
@Override
public void show() {
System.out.println("冬天");
}
};
private final String seasonName;
private final String seasonIntroduction;
private Season(String seasonName, String seasonIntroduction){
this.seasonName = seasonName;
this.seasonIntroduction = seasonIntroduction;
}
public String getSeasonName() {
return seasonName;
}
public String getSeasonIntroduction() {
return seasonIntroduction;
}
}