java增强_枚举的总结

1、为什么要有枚举

1)问题:要定义星期几或者性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但是可能会写成int weekday=0吗?

2)枚举就是要让某个类的变量取值只能为若干个固定值的一个,否则,编译器就会报错。枚举可以让编译器在编译就控制源码程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。

2、用普通的Java类来实现枚举:

1)私有构造函数

2)在类的内部构造对象,并加上final  Static标示,这样可以根据需要创建固定数量

对象

3)可以有若干公有或抽象方法,例如,要提供的nextWeekDay方法必须是抽象的。采用抽象方法定义nextWeekDay将大量的if.esle语句转移到了一个独立的类中了。

实现如下:

public abstract class WeekDay1 {
//1私有构造函数
private WeekDay1(){}
//2在类的内部创建不变的对象
final static WeekDay1 SUN=new WeekDay1(){
@Override
public WeekDay1 nextWeekDay() {
// TODO Auto-generated method stub
return MON;
}
};
final static WeekDay1 MON=new WeekDay1(){
@Override
public WeekDay1 nextWeekDay() {
// TODO Auto-generated method stub
return SUN;
}
};
//3抽象本类方法
 abstract public WeekDay1 nextWeekDay();
 
 //4 打印日期
@Override
public String toString() {
// TODO Auto-generated method stub
return this==MON?"MON":"SUN";
}
}


3、创建一个枚举类

1)枚举就相当于一个类,其中也可以定义构造函数、成员变量、普通方法和抽象方法。

2)枚举元素必须位于枚举体重的最开始部分,枚举元素列表的后要有分号与其成员分隔。把枚举中的成员放在枚举元素的签名,编译器就会报错。

3)带构造方法的枚举

①构造方法必须定义成私有的private

②如果有多个构造方法,该如何选择哪个构造方法?

③枚举元素MONMON()的效果一样,都是调用默认的构造方法。

4)带方法的枚举

②定义枚举TrafficLamp

②实现普通的next方法

③实现抽象的next方法:每个元素 分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义。

5)增加上表示时间的构造方法。

6)枚举只有一个成员时,就可以作为一种单例的实现方式。

而枚举类如下:

public enum TrafficLamp{
RED(30){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return GREEN; 
}
},
GREEN(45){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return YELLOW;
}
},
YELLOW(5){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp (int time){this.time=time;};
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值