1、问题:
- 某些方法所接受的数据必须是在固定范围之内的,怎么解决?
- 方案一:jdk1.5之前,自定义一个类,私有化构造函数,在自定义类中创建本类的对象对外使用。
- 方案二:jdk1.5之后,使用枚举类(enum)来解决这种问题。
1.1 方案一:jdk1.5之前,使用自定义类解决
// 方案一:jdk1.5之前,自定义一个类,私有化构造方法,在自定义类中创建类的对象,对外使用
class Gender {
String value;//成员变量
public static final Gender man = new Gender("男");
public static final Gender woman = new Gender("女");
//私有化构造方法,使外部无法构建类的实例
private Gender(String value) {
this.value = value;
}
}
1.2 方案二:jdk1.5之后使用枚举类解决
enum Sex {
//7.枚举值必须位于枚举类的第一个语句,多个枚举值之间使用逗号(,)分开
//1.枚举值默认的修饰符是private static final
woman("女") {
@Override
public void run() {
System.out.println("女人在跑...");
}
},
//2.枚举值的数据类型就是枚举值所属类的类型,它指向了本类的对象。
//2.枚举值 man("男") 与 private static final Sex man = new Sex("男");相等
man("男") {
@Override
public void run() {
System.out.println("男人在跑...");
}
};
String value;// 3.枚举类可以有成员变量
private void sun() {//3.枚举类可以有成员函数
System.out.println("枚举类的成员函数...");
}
//4.枚举类可以有构造函数,但是修饰符必须是private,默认也是private
private Sex(String value) {
this.value = value;
}
// 5.枚举类可以存在抽象方法,但是枚举值必须实现抽象方法
public abstract void run();
}
2、枚举类
- 一些方法在运行时,他需要的数据不能是任意的,必须是固定范围之内的值,jdk1.5后可以直接使用枚举(enum)解决
2.1 枚举类的格式
enum 类名{
// 枚举值
}
2.2 枚举类需要注意的细节
1.枚举类是一个特殊的类 2.枚举值默认的修饰符是:public static final 3.枚举值就是枚举值所属的类的数据类型,然后枚举值是指向了本类的对象的。 4.枚举类的构造方法的修饰符,默认是private 5.枚举类可以定义自己的成员变量和成员函数。 6.枚举类可以自定义构造函数,但是修饰符必须是private 7.枚举类可以存在抽象的方法,但是枚举值必须实现抽象方法 8.枚举值必须要位于枚举类的第一个语句。
3.在switch中使用枚举类
switch适用的数据类型:byte、short、int、char、String、枚举 注意:case语句后边跟的枚举值,只需要单写枚举值即可,不需要再声明该枚举值是属于哪个枚举类的。
3.1 案例
public class Dome4 {
public static void main(String[] args) {
Season season = Season.spring;//枚举类的构造方法默认是private,不能在外部创建实例
switch (season) {
case spring://当option是枚举类的对象时,case选项不需要使用类名.属性,直接使用属性即可。
System.out.println("春天来了....");
break;
case summer:
System.out.println("夏天来了....");
break;
case autumn:
System.out.println("秋天来了....");
break;
case winter:
System.out.println("冬天来了....");
break;
}
}
}
// 季节枚举类
enum Season {
spring, summer, autumn, winter // 枚举值
}