版权声明:如果转载或使用本博客,请标明出处 https://blog.csdn.net/Black1499/article/details/81708606
概述
enum的全称为enumeration, 是 JDK 1.5中引入的新特性,存放在 java.lang包中。在某些情况下,一个类的对象是固定的,就可以定义为枚举。在实际使用中,枚举类型也可以作为一种规范,保障程序参数安全。
特点
- Java中枚举和类、接口的级别相同。
- 枚举和类一样,都有自己的属性、方法、构造方法,不同点是:枚举的构造方法只能是private修饰,也就无法从外部构造对象。构造方法只在构造枚举值时调用。
- 使用enum关键字声明一个枚举类型时,就默认继承自Java中的 java.lang.Enum类,并实现了java.lang.Seriablizable和 java.lang.Comparable两个接口。
- 所有的枚举值都是 public static final 的,且非抽象的枚举类不能再派生子类。
- 枚举类的所有实例(枚举值)必须在枚举类的第一行显式地列出,否则这个枚举类将永远不能产生实例。
- 判断枚举是否相同时,使用 == 和 equals 是一样的。
用法
1、常量
在普通的类中,我们定义常量的方式如下:
public static final String SEASON_SPRING="春天";
public static final String SEASON_SUMMER="夏天";
public static final String SEASON_FALL="秋天";
public static final String SEASON_WINTER="冬天";
但是这样做会有一定的缺陷:
类型不安全。若一个方法中要求传入季节这个参数,用常量的话,形参就是String类型,开发者传入任意类型的String类型值就行,但是如果是枚举类型的话,就只能传入枚举类中包含的对象
没有命名空间。开发者要在命名的时候以SEASON_开头,这样另外一个开发者再看这段代码的时候,才知道这四个常量分别代表季节。
使用enum枚举类声明常量
public enum Season {
//常量无参数
SPRING,SUMMER,FALL,WINTER;
//常量有参数
/*
SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天");
private final String NAME;
private Season(String name) {
this.NAME = name;
}
*/
}
2、switch选择枚举类常量
Season season=null;
switch (season){
case SPRING:
season=Season.SPRING;
break;
case SUMMER:
season=Season.SUMMER;
break;
case FALL:
season=Season.FALL;
break;
case WINTER:
season=Season.WINTER;
break;
}
3、枚举类添加成员
枚举类可以填加属性,方法,可以使静态的,也可以是非静态的。
//属性
private String name;
//构造方法
private Season(String name) {
this.name = name;
}
//get方法
public String getName() {
return name;
}
//set方法
public void setName(String name) {
this.name = name;
}
4、覆盖枚举方法
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
'}';
}
5、实现接口
interface MyInterface{
void print();
}
public enum Season implements MyInterface{
@Override
public void print() {
System.out.println("季节");
}
}
6、使用接口组织枚举
public interface Food {
enum DRINK implements Food{
COKE,COFFEE,JUICE
}
}
总结
这里只是简单的认识一下枚举类以及经常见到的使用它的方法,如想了解更多可以参考博客:
http://www.cnblogs.com/sister/p/4700702.html
https://blog.csdn.net/qq_27093465/article/details/52180865
https://www.jb51.net/article/99557.htm