java枚举
枚举是是jdk 1.5提供的。在提到枚举类之前,先假设一个对象中具有一个gender成员变量。那我们可以通过char来定义。但是一样的方式也有他的弊端。因为我们在设置性别的时候是可以放入任何char型的数据的。虽然我们可以使用setter方法来控制用户的输入合法性但是枚举类提供了更方便的方法。
在jdk1.5之前是没有枚举类的。那么我们先看一看自定义枚举类是怎么做的。
class User{
private String name;
private Gender gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
}
这是一个User的实体类,他有名字和性别这两个成员属性。而gender是一个自定义的枚举类。下面展示自定义枚举类的代码
class Gender{
private String name;
public static final Gender BOY=new Gender("男");
public static final Gender GIRL=new Gender("女");
private Gender(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Gender [name=" + name + "]";
}
}
. 自定义枚举类
1. 将构造器私有化
2. 对外暴露若干个静态对象
3. 不允许外界对提供的对象进行修改,所以设置为final
4. 对象的属性值也不能允许更改, 将set方法取消
5. 对象名改为全大写
这样的构造很像单例模式区别在于
单例模式 :一个 类对外只提供一个对象
枚举: 一个类对外提供有限个数的对象
接下来便是有jdk1.5提供的枚举类
enum Gender {
BOY("男"), GIRL("女");
private String name;
public Gender(String sex){
this.sex = sex;
}
}
上面代码中BOY和GIRL两个对象其实是
public static final Gender BOY=new Gender("男");
public static final Gender GIRL=new Gender("女");
枚举对象对其上进行了简化。
二 、 枚举类的语法和常用方法:
1. enum创建枚举类
语法: enum 类名{
对象名(参数列表),对象名(参数列表)...;
属性
get方法
构造器
}
2. 特点:
a. 采用enum修饰的类默认就是枚举类,构造器默认是私有的
b. 枚举类第一行必须是对象的创建
只需要写对象名就可以,如果是多个用逗号隔开,如果需要调用有参构造器,需要添加括号传参
BOY("男"),GIRL("女");
c. 显示的创建构造器,必须是私有的
d. 采用enum创建的类默认父类是Enum
3. Enum的常用方法
toString() 返回对象的对象名
name() 返回对象的对象名 不能被重写
ordinal() 返回对象的索引值
Gender1.values() 静态方法 返回当前枚举类对外提供的所有对象
Gender1.valueOf("BOY") 静态方法 根据字符串返回和字符串相同名称的对象
4. 枚举类去实现接口
a. 和普通类去实现接口的方式一致
b. 枚举类的对象可以对接口中的方法进行单独实现、重写
对象名(参数列表){抽象方法的实现}
BOY("男"){
public void fly(){
System.out.println("开心的飞走了");
}
}