黑马程序员_java基础加强学习之枚举
2013-12-11 12:43
537 查看
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流!
----------
1.5的新特性:枚举
枚举就是一个类,枚举的成员就是类的实例对象。
枚举的作用:
枚举可让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在编程时无法实现。
(假设用1~7分别表示星期一到星期日,但有人可能会写成int weekDay = 0;即便使用常量方式也无法阻止意外。)
例子:自定义weekDay.
import java.util.Date;
public abstract class EnumTest {
public static void main(String[] args) {
WeekDay1weekDay =WeekDay1.MON;
System.out.println(weekDay.nextDay());
//只能给定义枚举方法中指定的的元素。
WeekDay weekDay2 = WeekDay.FRI;
//枚举自动帮我们实现了toSting方法,这是我们的好处。
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); //values方法将枚举类对象变成数组。
newDate(300){};
}
//元素列表必须位于所有成员之前,构造方法必须是私有的。
//若要指明用第二个构造函数,在元素后面直接跟上一对有参数的圆括号。指定参数列表。
//若元素后跟上一对括号无参数,可用于表示不带参数的构造方法。
//枚举类
public enum WeekDay{
SUN(1),MON(),TUE
,THI,FRI, SAT;
//无参构造方法
private WeekDay(){
System.out.println("first");
}
//重载构造方法
private WeekDay(intday){
System.out.println("second");}
}
//定义枚举TrafficLamp,实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象。
//3个元素,每个元素都是由子类来写的 ,子类必须完成父类的抽象方法。
public enum TrafficLamp{
//红灯、绿灯、黄灯,后面出现{}是因为这些成员由其子类来实现
RED(30){
//匿名内部类实现弗雷的抽象方法
public TrafficLamp nextLamp(){
returnGREEN;}
},
GREEN(45){
public TrafficLamp nextLamp(){
returnYELLOW;}
},
YELLOW(5){
public TrafficLamp nextLamp(){
returnRED;}
};
//抽象方法
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp (int time){this.time=time;}
}
}
public abstract classWeekDay1 {
private WeekDay1(){}
//以下为匿名内部类。用了抽象类把nextDay分别转成一个个独立的类。
//每个元素分别用一个公有的静态成员变量表示。
public final staticWeekDay1 SUN=newWeekDay1(){
publicWeekDay1 nextDay(){
returnMON;
}
};
public final staticWeekDay1 MON=new WeekDay1(){
publicWeekDay1 nextDay(){
returnTUE;
}
};
public final staticWeekDay1 TUE=new WeekDay1(){
publicWeekDay1 nextDay(){
return WED;
}
};
......
public final static WeekDay1 SAT=new WeekDay1(){
public WeekDay1 nextDay(){
returnSUN;
}
};
//方法是静态的,类也必须是静态的。
//采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。
public abstractWeekDay1 nextDay();
publicString toString(){
if(this==SUN)
return"SUN";
else if (this==MON)
return"MON";
......
else if (this==SAT)
return "SAT";
else return null;
}
}
总结:1.枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象。
2.枚举相当于一个类,其中可以定义构造方法。成员变量、普通方法和抽象方法。
3.构造方法必须定义成私有的。如果有多个构造方法,都是调用默认的构造方法。
4.当枚举只有一个成员时,就可以作为一个单例的实现方式。
5.枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。把美剧中的成员方法或变量等放在枚举元素的前面,编译报告错误。
----------
1.5的新特性:枚举
枚举就是一个类,枚举的成员就是类的实例对象。
枚举的作用:
枚举可让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在编程时无法实现。
(假设用1~7分别表示星期一到星期日,但有人可能会写成int weekDay = 0;即便使用常量方式也无法阻止意外。)
例子:自定义weekDay.
import java.util.Date;
public abstract class EnumTest {
public static void main(String[] args) {
WeekDay1weekDay =WeekDay1.MON;
System.out.println(weekDay.nextDay());
//只能给定义枚举方法中指定的的元素。
WeekDay weekDay2 = WeekDay.FRI;
//枚举自动帮我们实现了toSting方法,这是我们的好处。
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); //values方法将枚举类对象变成数组。
newDate(300){};
}
//元素列表必须位于所有成员之前,构造方法必须是私有的。
//若要指明用第二个构造函数,在元素后面直接跟上一对有参数的圆括号。指定参数列表。
//若元素后跟上一对括号无参数,可用于表示不带参数的构造方法。
//枚举类
public enum WeekDay{
SUN(1),MON(),TUE
,THI,FRI, SAT;
//无参构造方法
private WeekDay(){
System.out.println("first");
}
//重载构造方法
private WeekDay(intday){
System.out.println("second");}
}
//定义枚举TrafficLamp,实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象。
//3个元素,每个元素都是由子类来写的 ,子类必须完成父类的抽象方法。
public enum TrafficLamp{
//红灯、绿灯、黄灯,后面出现{}是因为这些成员由其子类来实现
RED(30){
//匿名内部类实现弗雷的抽象方法
public TrafficLamp nextLamp(){
returnGREEN;}
},
GREEN(45){
public TrafficLamp nextLamp(){
returnYELLOW;}
},
YELLOW(5){
public TrafficLamp nextLamp(){
returnRED;}
};
//抽象方法
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp (int time){this.time=time;}
}
}
public abstract classWeekDay1 {
private WeekDay1(){}
//以下为匿名内部类。用了抽象类把nextDay分别转成一个个独立的类。
//每个元素分别用一个公有的静态成员变量表示。
public final staticWeekDay1 SUN=newWeekDay1(){
publicWeekDay1 nextDay(){
returnMON;
}
};
public final staticWeekDay1 MON=new WeekDay1(){
publicWeekDay1 nextDay(){
returnTUE;
}
};
public final staticWeekDay1 TUE=new WeekDay1(){
publicWeekDay1 nextDay(){
return WED;
}
};
......
public final static WeekDay1 SAT=new WeekDay1(){
public WeekDay1 nextDay(){
returnSUN;
}
};
//方法是静态的,类也必须是静态的。
//采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。
public abstractWeekDay1 nextDay();
publicString toString(){
if(this==SUN)
return"SUN";
else if (this==MON)
return"MON";
......
else if (this==SAT)
return "SAT";
else return null;
}
}
总结:1.枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象。
2.枚举相当于一个类,其中可以定义构造方法。成员变量、普通方法和抽象方法。
3.构造方法必须定义成私有的。如果有多个构造方法,都是调用默认的构造方法。
4.当枚举只有一个成员时,就可以作为一个单例的实现方式。
5.枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。把美剧中的成员方法或变量等放在枚举元素的前面,编译报告错误。
相关文章推荐
- 黑马程序员—Java基础加强学习笔记之枚举&反射
- 黑马程序员--Java基础加强学习笔记之重载和覆写、可变参数、枚举
- 黑马程序员java学习<基础加强>—交通灯
- 黑马程序员——java基础加强之枚举
- 黑马程序员__关于学习Java基础加强的总结_2
- 黑马程序员—Java基础加强—(枚举)
- 黑马程序员_java基础加强-枚举和反射
- 黑马程序员-java学习基础加强之IO流
- 黑马程序员 java基础加强——jdk1.5新特性—枚举
- 【黑马程序员】java基础加强_枚举
- 黑马程序员java学习<基础加强>—泛型
- <黑马程序员>枚举--(java基础加强1.5新特性)
- 黑马程序员_java基础加强学习笔记之(JDK1.5新特性)
- 黑马程序员java学习<基础加强>—JavaBean
- 黑马程序员---java学习笔记之java基础加强二
- 黑马程序员--Java基础加强(高新技术)学习第二天
- 黑马程序员--Java基础加强(高新技术)学习第三天
- 黑马程序员_java基础加强_枚举
- 黑马程序员Java基础加强33-40学习日记
- 黑马程序员--Java基础加强学习笔记之Class类、反射(Reflect)