package j2se_develop;
/**
* 枚举
* JDK1.5新特性
* 枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。
* 枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标
*
* @author zjw
*
*/
public class Enumeration {
public static void main(String[] args) {
// Week fri = Week.FRI;
// System.out.println(fri.nextDay()+",,,,,,,,,,"+fri.toString());
WeekDay wd=WeekDay.Sat;
System.out.println(wd);
System.out.println(wd.name());//获取对象的名称
System.out.println(wd.ordinal());//这个变量对应引用类型的排序位置,从0开始排的
System.out.println(WeekDay.valueOf("Mon"));//根据字符串封装为对象
for(WeekDay d:WeekDay.values()){//得到枚举类中的所有的枚举元素,并用增强for循环遍历
System.out.println("------"+d.name());
}
}
//运用java封装好的枚举
/**
* 通过两种方式调用构造方法(两种方法),首先明确,默认调用的是无参的构造方法
* 1,通过在参数后面添加符合相应构造方法参数,如:Sun(1);这就实现了调用了那个有参数的构造方法,当然Sun();括号中什么不写代表调用无参构造方法,不过默认就是这样的
* 2,通过构造方法间的调用
*
*/
public enum WeekDay{
Sun,Mon,Tue,Wed,Thi,Fri,Sat;//如果只是这些参数,最后的分号可有可无;但如果下面还有其他的内容,如构造方法,就要加分号
//上面的参数默认的调用的是无参构造方法,可以在参数后面指定调用哪个构造方法,如:Sun(1);这就是调用的有参数的构造方法,你懂的
private WeekDay(){//构造方法要私有化
this(1);//当然,通过构造方法之间的调用也是可以的啊
//System.out.println("无参构造方法---------------");
}
private WeekDay(int day){//构造方法要私有化
System.out.println("有参构造方法");
}
}
/**
* 枚举类中有抽象方法
* 例子:交通灯,三种信号灯,红灯后是绿灯,绿灯后是黄灯,黄灯后是红灯
*
* 如果枚举中只有一个参数,就可以作为一种单例的实现方式
*/
public enum TrafficLamp{
//参数列表要写在第一行
RED(30){
public TrafficLamp nextLamp() {
return GREEN;
}
},
YELLOW(45){
public TrafficLamp nextLamp() {
return RED;
}
},
GREEN(5){
public TrafficLamp nextLamp() {
return YELLOW;
}
};
public abstract TrafficLamp nextLamp();
private int time;//定义每个灯的时间
private TrafficLamp(int time){//定义私有构造方法
this.time=time;
}
}
}
/**
* 模拟枚举原理
*
* @author zjw
*
*/
abstract class Week{
private Week(){
}
//final和static的位置可以互换
//此种方式使用抽象类来做的,枚举就是这样做的
public final static Week SUN=new Week(){
public Week nextDay() {
return MON;
}
};
public final static Week MON=new Week(){
public Week nextDay() {
return TUE;
}
};
public final static Week TUE=new Week(){
public Week nextDay() {
return WED;
}
};
public final static Week WED=new Week(){
public Week nextDay() {
return THE;
}
};
public final static Week THE=new Week(){
public Week nextDay() {
return FRI;
}
};
public final static Week FRI=new Week(){
public Week nextDay() {
return SAT;
}
};
public final static Week SAT=new Week(){
public Week nextDay() {
return SUN;
}
};
public abstract Week nextDay();
// //final和static的位置可以互换
// public final static Week SUN=new Week();
// public final static Week MON=new Week();
// public final static Week TUE=new Week();
// public final static Week WED=new Week();
// public final static Week THE=new Week();
// public final static Week FRI=new Week();
// public final static Week SAT=new Week();
// public Week nextDay(){
// if(this==SUN){
// return MON;
// }else if(this==MON){
// return TUE;
// }else if(this==TUE){
// return WED;
// }else if(this==WED){
// return THE;
// }else if(this==THE){
// return FRI;
// }else if(this==FRI){
// return SAT;
// }else{
// return SUN;
// }
// }
public String toString(){
String temp="";
if(this==SUN){
temp="SUN";
}else if(this==MON){
temp="MON";
}else if(this==TUE){
temp="SUN";
}else if(this==WED){
temp="WED";
}else if(this==THE){
temp="THE";
}else if(this==FRI){
temp="FRI";
}else{
temp="SAT";
}
return temp;
}
}
黑马程序员——枚举的原理及枚举构造方法调用,抽象方法实现等等介绍
最新推荐文章于 2021-02-16 15:10:27 发布