您的位置:首页 > 编程语言 > Java开发

Java高新技术新特性之枚举

2012-07-19 22:54 330 查看
[align=center] [/align]
[align=center] [/align]
[align=left] 枚举是JDK1.5出现的新特性,看了张老师的视频,对枚举还是似懂非懂,不知道它的存在意义是什么,什么时候要用,于是就反复看,并上网查资料来深入的理解枚举,还是没有知道使用枚举到底有什么好处,什么时候要用枚举,现在只把,关于枚举的一些基本知识列出,相信在以后的工作当中会从问题中发现枚举的用处的。[/align]
[align=left] 枚举类型是派生自System.Enum的一种独特的值类型,用于声明一组命名的常数。每种枚举类型均有一种基础类型,此基础类型可以使除char类型以外的任何整型。枚举元素的默认基础类型为int 默认情况下,第一个枚举元素的值为0,后面每个枚举元素的值依次递增1。[/align]
public class EnumTest {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
WeekDay1 weekDay = WeekDay1.MON;
//		System.out.println(weekDay.nextDay().nextDay());
WeekDay weekDay2 = WeekDay.FRI;
System.out.println(weekDay2);
System.out.println(weekDay2.name());
System.out.println(weekDay2.ordinal());
System.out.println(WeekDay.valueOf("SUN").toString());
System.out.println(WeekDay.values().length);
}

public enum WeekDay{
SUN(),MON(1),TUE,WED,THI,FRI,SAT;//元素列表必须放在所有定义的方法之前
private WeekDay(){System.out.println("first");};//执行了七次,只要用到了类,类中的静态变量都会被初始化
private WeekDay(int day){System.out.println("second");};
}
}


其中涉及到的知识点有:
[align=left]1、私有构造方法以及构造方法的访问,默认会执行枚举的无参构造方法,以上代码中的SUN(),TUE,WED,THI,FRI,SAT都是访问的枚举的默认的无参构造方法,可以通过加参数来调用带参数的构造方法,MON(1)访问枚举的private WeekDay(int day){System.out.println("second");};构造方法[/align]
[align=left]2、因为枚举中的元素为枚举类的静态变量,所以只要访问到了枚举类,就会把这些静态变量进行初始化,调用相应的构造方法。[/align]
[align=left]3、枚举中定义公有方法和类中定义方法,用法是一样的。[/align]
[align=left] public String showHello(){[/align]
[align=left] return "Hello";[/align]
[align=left] }[/align]
[align=left]4、定义抽象方法时候,枚举中的每一个元素都要将抽象方法实现,原因是,枚举中的元素是定义的枚举类型,然后枚举中存在抽象方法的话,这些元素是已经构造出来的,不应该再有抽象的方法了[/align]
publicpublic 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(10){

@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;}//带参数的构造方法,因为这儿显示提供了带参数的构造方法,
//而且,诶有提供默认的无参构造方法,所以,每一个枚举元素通过该方法构造
}


对枚举的认识暂时就到这个层面上,可能以上说的也会有错误的观点,欢迎大家指正,批评,补充,谢谢!!!
[align=center] [/align]
[align=center] [/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐