1.1实际上枚举就是一种高级的多例设计模式。
eg:基于枚举开发
enum Color {
RED,GREEN,BLUE
}
public class TestDemo {
public static void main(String[] args) {
System.out.println(Color.BLUE);
}
}
1.2 Enum类
enum并不是一种新的结构,它只是对一种类型的包装:
使用enum关键字定义的枚举类本质上就相当于一个Class定义的类,继承了java.lang.Enum父类。
在Enum类里面有以下方法:
- 构造方法:
protected Enum(String name, int ordinal) - 取得枚举名字:
public final String name() - 取得枚举序号:
public final int ordinal()
eg:
enum Color {
RED,GREEN,BLUE
}
public class TestDemo {
public static void main(String[] args) {
System.out.println(Color.BLUE.ordinal() + "=" +Color.BLUE.name());
}
}
通过以上代码发现,所有的枚举类默认继承于Enum类
在枚举操作中还有一个方法可以取得所有的枚举数据:values()返回的是一个枚举的对象数组。
eg:取得所有枚举数据
enum Color {
RED,GREEN,BLUE
}
public class TestDemo {
public static void main(String[] args) {
for (Color temp : Color.values()) {
System.out.println(temp.ordinal()+" = " +temp.name());
}
}
}
面试:请解释enum与Enum区别:
enum是一个关键字,使用enum定义的枚举类本质上就相对于一个类继承了Enum这个抽象类而已。
1.3 定义结构
虽然枚举等同于多例设计,但是多例设计是在一个类中产生的,所以该类中可以定义更多的属性或方法。所以在枚 举设计的时候考虑到这些因素,提出了更为全面的设计方案:可以在枚举中定义属性、方法、实现接口。
eg:在枚举中定义更多的结构
enum Color {
RED("红色"),
GREEN("绿色"),
BLUE("蓝色") ; // 如果定义有很多内容,枚举对象必须写在第一行
private String title ;
private Color(String title) {
// 构造方法私有化
this.title = title ;
} @Override
public String toString() {
return this.title ;
}
}
public class TestDemo {
public static void main(String[] args) {
System.out.println(Color.BLUE);
}
}
枚举还可以实现接口,这样枚举中的每一个对象都变成了接口对象。
eg:枚举实现接口
interface IColor {
public String getColor() ;
}
enum Color implements IColor{
RED("红色"),
GREEN("绿色"),
BLUE("蓝色") ;
// 如果定义有很多内容,枚举对象必须写在第一行
private String title ;
private Color(String title) {
// 构造方法私有化
this.title = title ;
} @Override
public String toString() {
return this.title ;
}
@Override
public String getColor() {
return this.title ;
}
}
public class TestDemo {
public static void main(String[] args) {
IColor iColor = Color.BLUE ;
System.out.println(iColor.getColor());
}
}
1.4 枚举应用
枚举的最大特点是只有指定的几个对象可以使用。
eg:定义一个表示性别的枚举类,只能有两个对象
enum Sex {
MALE("男"),
FEMALE("女") ;
private String title ;
private Sex(String title) {
this.title = title ;
}
@Override
public String toString() {
return this.title ;
}
}
class Person {
private String name ;
private int age ;
private Sex sex ;
public Person(String name, int age, Sex sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
}
public class TestDemo {
public static void main(String[] args) {
Person per = new Person("张三", 20, Sex.MALE) ;
System.out.println(per);
}
}
另外需要注意的是,枚举本身还支持switch判断。
eg:switch使用枚举
enum Sex {
MALE,
FEMALE
}
public class TestDemo {
public static void main(String[] args) {
switch(Sex.MALE) {
case MALE :
System.out.println("男人");
break ;
case FEMALE :
System.out.println("女人");
break ;
}
}
}
615

被折叠的 条评论
为什么被折叠?



