一、枚举法
特点:有限确定
类的对象是有限的、确定的,这个类可以定义为枚举类
自定义枚举类
public class Season {
//属性
private final String seasonName;
private final String seasonDesc;
//利用构造器对属性赋值
//构造器私有化,外界不能调用这个构造器,只能内部调用
private Season(String seasonName,String seasonDesc) {
this.seasonName=seasonName;
this.seasonDesc=seasonDesc;
}
//提供枚举类的有限的,确定的对象
public static final Season SPRING=new Season("春天","春暖花开");
public static final Season SUMMER=new Season("夏天",";烈日炎炎");
public static final Season AUTUMN=new Season("秋天","秋风瑟瑟");
public static final Season WINTER=new Season("冬天","白雪皑皑");
//提供对应的GET方法
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
public class TestEnum {
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring);
System.out.println(spring.getSeasonName());
}
}
二、使用关键字enum创建枚举类
提供枚举类的有限的,确定的对象,要求对象必须在最开始的位置
多个对象需要用逗号连接,最后一个用分号连接
public enum Season {
//提供枚举类的有限的,确定的对象,要求对象必须在最开始的位置
//多个对象需要用逗号连接,最后一个用分号连接
SPRING("春天","春暖花开"),
SUMMER("夏天",";烈日炎炎"),
AUTUMN("秋天","秋风瑟瑟"),
WINTER("冬天","白雪皑皑");
//属性
private final String seasonName;
private final String seasonDesc;
//利用构造器对属性赋值
//构造器私有化,外界不能调用这个构造器,只能内部调用
private Season(String seasonName,String seasonDesc) {
this.seasonName=seasonName;
this.seasonDesc=seasonDesc;
}
使用
自定义的枚举类上层父类时object
enum关键字定义的枚举类上层父类是java,lang.enum
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring);
//自定义的枚举类上层父类时object
//enum关键字定义的枚举类上层父类是java,lang.enum
System.out.println(Season.class.getSuperclass().getName());//java.lang.enum
}
源码枚举类形态
public enum Season {
SPRING,
SUMMER,
AUTUMN,
WINTER;
}
因为这个枚举类底层没有属性,构造器
三、enum的常用方法
public static void main(String[] args) {
//enum创建的season枚举类上面的父类是:Java,lang.Enum,常用方法可以直接使用
//to String获取对象的名字
System.out.println(Season.AUTUMN);
//value
Season[] values = Season.values();
//增强for循环
for(Season s:values){
System.out.println(s/*.toString()*/);
}
//valueOf()通过对象名字获取这个枚举类
Season spring = Season.valueOf("SPRING");
System.out.println(spring);
}
}
四、枚举类实现接口
接口
public interface TestInterface {
void show();
}
类
public enum Season implements TestInterface{
SPRING{@Override
public void show() {
System.out.println("春天");
}},
SUMMER{
@Override
public void show() {
System.out.println("夏天");
}
},
AUTUMN{
@Override
public void show() {
System.out.println("秋天");
}
},
WINTER{
@Override
public void show() {
System.out.println("冬天");
}
};
}
测试类
public class TestSeason {
public static void main(String[] args) {
Season autumn = Season.AUTUMN;
autumn.show();
Season spring = Season.SPRING;
spring.show();
}
}
五、枚举的应用
类
public class Pesrson {
private int age;
private String name;
private Gender sex;
@Override
public String toString() {
return "Pesrson{" +
"age=" + age +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
'}';
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Gender getSex() {
return sex;
}
public void setSex(Gender sex) {
this.sex = sex;
}
}
枚举类
public enum Gender {
男,女;
}
测试类
public static void main(String[] args) {
Pesrson p=new Pesrson();
p.setAge(20);
p.setName("stella");
p.setSex(Gender.男);//传入类Gender的对象,在入口处对参数进行了限制
System.out.println(p.getSex());
}
switch结合
public static void main(String[] args) {
//switch后面的括号可以传入枚举类型
//int short int char byte String 枚举
Gender sex=Gender.男;
switch (sex){
case 男:
System.out.println("男生");
break;
case 女:
System.out.println("女生");
break;
}
}