`
李勋辉
  • 浏览: 13711 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 新特性 枚举

阅读更多

JDK  新特性之枚举(enum):

枚举就是要某个类型的变量的取值只能是几个固定值中的某一个,否则,编译器就会报错,枚举可以让编译器在编译时就可以控制程序中填写的非法值,普通变量的方式无法实现这一目标;

 

枚举的实现:

 

 

package learn;
/**
 * 枚举
 * @author hui 
 */
public class EnumTest {
public static void main(String[] args) {
	WeekDay weekDay=WeekDay.SUN;//自己定义的类型WeekDay
	System.out.println(weekDay.nextDay().toString());
			
}

}
在上面的类中,自己定义了一个类型WeekDay,建立一个自己的枚举类WeekDay_1;
package learn;
public class WeekDay_1 {
 /* 这个类必须要有一个私有的构造 */
private WeekDay_1(){};
public static final WeekDay_1 SUN = new WeekDay_1() ;//星期天
public static final WeekDay_1 MON = new WeekDay_1() ;//星期一
public static final WeekDay_1 TUS = new WeekDay_1() ;//星期二
public static final WeekDay_1 WEN = new WeekDay_1() ;//星期三
public static final WeekDay_1 THUR = new WeekDay_1() ;//星期四
public static final WeekDay_1 FRI = new WeekDay_1() ;//星期五
public static final WeekDay_1 SAT = new WeekDay_1() ;//星期六
/*
 * 他有一个方法,返回下一天
 * */
public WeekDay_1  nextDay(){
  if (this==SUN) { return MON; } else
   if(this==MON){ return TUS; }else if(this==TUS){ return WEN; }else
   if(this==WEN){ return THUR; }else if(this==THUR){ return FRI; }else
   if(this==FRI){ return SAT; }else { return SUN; }
}
/**
 * 重写toString()方法
 */
public String toString(){
 if (this == SUN) {
  return "Sunday";
 } else if (this == MON) {
  return "Monday";
 } else if (this == TUS) {
  return "Tuesday";
 } else if (this == WEN) {
  return "Wednesday";
 } else if (this == THUR) {
  return "Thursday";
 } else if (this == FRI) {
  return "Friday";
 } else {
  return "Saturday";
 }
}
}
上面的方法,如果因为if..else..太过繁琐,可以写成:
package learn;
public abstract class WeekDay {
 private WeekDay() {
 }
//使用内部类的方式来实现nextDay
 public static final WeekDay SUN = new WeekDay() {
  @Override
  public WeekDay nextDay() {
   return MON;
  }
 };
 public static final WeekDay MON = new WeekDay() {
  @Override
  public WeekDay nextDay() {
   return TUS;
  }
 };
 public static final WeekDay TUS = new WeekDay() {
  @Override
  public WeekDay nextDay() {
   return WEN;
  }
 };
 public static final WeekDay WEN = new WeekDay() {
  @Override
  public WeekDay nextDay() {
   return THUR;
  }
 };
 public static final WeekDay THUR = new WeekDay() {
  @Override
  public WeekDay nextDay() {
   return FRI;
  }
 };
 public static final WeekDay FRI = new WeekDay() {
  @Override
  public WeekDay nextDay() {
   return SAT;
  }
 };
 public static final WeekDay SAT = new WeekDay() {
  @Override
  public WeekDay nextDay() {
   return SUN;
  }
 };
 /*
  * public WeekDay nextDay(){ if (this==SUN) { return MON; } else
  * if(this==MON){ return TUS; }else if(this==TUS){ return WEN; }else
  * if(this==WEN){ return THUR; }else if(this==THUR){ return FRI; }else
  * if(this==FRI){ return SAT; }else { return SUN; } }
  */
 public abstract WeekDay nextDay();
 public String toString() {
  if (this == SUN) {
   return "Sunday";
  } else if (this == MON) {
   return "Monday";
  } else if (this == TUS) {
   return "Tuesday";
  } else if (this == WEN) {
   return "Wednesday";
  } else if (this == THUR) {
   return "Thursday";
  } else if (this == FRI) {
   return "Friday";
  } else {
   return "Saturday";
  }
 }
}

 使用JDK自带的枚举:

package learn;
/**
 * 枚举
 * @author hui
 *
 */
public class EnumTest {
public static void main(String[] args) {
 WeekDay weekDay=WeekDay.SUN;
 System.out.println(weekDay.nextDay().toString());
 
 WeekDay_2  weekDay2=WeekDay_2.MON;
 System.out.println(weekDay2.name());//返回当前对象的名字
 System.out.println(weekDay2.toString());//返回当前对象的toString
 System.out.println(weekDay2.ordinal());//返回当前对象的排序
 
}
/**
 * 枚举
 * @author hui
 *
 */
 public enum WeekDay_2{
  SUN,MON,TUS,WEN,THUR,FRI,SAT;//各个值之间用逗号隔开
 }
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics