黑马程序员:Java基础总结----枚举
2013-07-10 19:16
369 查看
黑马程序员:Java基础总结
枚举
ASP.Net+Android+IO开发、.Net培训、期待与您交流!
枚举
为什么要有枚举
问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday = 0;或即使使用常量方式也无法阻止意外。
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能。
私有的构造方法
每个元素分别用一个公有的静态成员变量表示
可以有若干公有方法或抽象方法。采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。
枚举的基本应用
举例:定义一个Weekday的枚举。
扩展:枚举类的values,valueOf,name,toString,ordinal等方法(记住,讲课时要先于自定义方法前介绍,讲课更流畅)
总结:枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象,例如可以调用WeekDay.SUN.getClass().getName和WeekDay.class.getName()。
普通方法实现枚举:
public class Ts
{
public static void main(String[]
args) {
[align=left] System. out.println(Weekday.mon);[/align]
[align=left] }[/align]
[align=left]}[/align]
abstract class Weekday
{
private Weekday()
{
[align=left] }[/align]
public final static Weekday mon = new Weekday()
{
[align=left] @Override[/align]
public Weekday
nextDay() {
// TODO Auto-generated
method stub
[align=left] return sun ;[/align]
[align=left] }[/align]
[align=left] @Override[/align]
publicString
toString() {
// TODO Auto-generated
method stub
[align=left] return "星期一" ;[/align]
[align=left] }[/align]
[align=left] };[/align]
public final static Weekday sun = new Weekday()
{
[align=left] @Override[/align]
public Weekday
nextDay() {
// TODO Auto-generated
method stub
[align=left] return mon ;[/align]
[align=left] }[/align]
[align=left] @Override[/align]
publicString
toString() {
// TODO Auto-generated
method stub
[align=left] return "星期三" ;[/align]
[align=left] }[/align]
[align=left] };[/align]
public abstract Weekday
nextDay();
[align=left] @Override[/align]
public abstractString
toString();
[align=left]}[/align]
[align=left]简单的枚举:[/align]
java.lang
类 Enum<E extends Enum<E>>
public class Ts
{
public static void main(String[]
args) {
[align=left] Weekday day = Weekday. Mon;[/align]
[align=left] System. out.println(day.toString());//Mon[/align]
[align=left] System. out.println(day.name());//Mon[/align]
[align=left] System. out.println(day.ordinal());//0[/align]
[align=left] System. out.println(Weekday.valueOf( "Mon"));//Mon[/align]
[align=left]获取数组:[/align]
[align=left] System. out.println(Weekday.values(). length);//7[/align]
[align=left] }[/align]
[align=left]}[/align]
enum Weekday
{
[align=left] Mon, Tue , The, Wer, Fri, Sta , Sun;[/align]
[align=left]}[/align]
[align=left]枚举的高级应用[/align]
枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。
枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。
带构造方法的枚举
构造方法必须定义成私有的
如果有多个构造方法,该如何选择哪个构造方法?
枚举元素MON和MON()的效果一样,都是调用默认的构造方法。
带方法的枚举
定义枚举TrafficLamp
实现普通的next方法
实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义。
增加上表示时间的构造方法
枚举只有一个成员时,就可以作为一种单例的实现方式。
public class Ts
{
public static void main(String[]
args) {
[align=left] TrafficLamp lamp = TrafficLamp. YRLLOW;[/align]
[align=left] System. out.println(lamp.nextLamp());//RED[/align]
[align=left] }[/align]
public enum TrafficLamp
{
[align=left] // 第一步RED{},GREEN{},YRLLOW{};[/align]
[align=left] // 第二步[/align]
RED(30)
{
[align=left] @Override[/align]
public TrafficLamp
nextLamp() {
// TODO Auto-generated
method stub
[align=left] return GREEN ;[/align]
[align=left] }[/align]
[align=left] },[/align]
GREEN(45)
{
[align=left] @Override[/align]
public TrafficLamp
nextLamp() {
// TODO Auto-generated
method stub
[align=left] return YRLLOW ;[/align]
[align=left] }[/align]
[align=left] },[/align]
YRLLOW(5)
{
[align=left] @Override[/align]
public TrafficLamp
nextLamp() {
// TODO Auto-generated
method stub
[align=left] return RED ;[/align]
[align=left] }[/align]
[align=left] };[/align]
[align=left] // 构造必须私有[/align]
private TrafficLamp()
{
[align=left] }[/align]
private TrafficLamp(int time)
{
[align=left] }[/align]
[align=left] // 抽象方法[/align]
public abstract TrafficLamp
nextLamp();
[align=left] }[/align]
[align=left]}[/align]
ASP.Net+Android+IO开发、.Net培训、期待与您交流!
枚举
ASP.Net+Android+IO开发、.Net培训、期待与您交流!
枚举
为什么要有枚举
问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday = 0;或即使使用常量方式也无法阻止意外。
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能。
私有的构造方法
每个元素分别用一个公有的静态成员变量表示
可以有若干公有方法或抽象方法。采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。
枚举的基本应用
举例:定义一个Weekday的枚举。
扩展:枚举类的values,valueOf,name,toString,ordinal等方法(记住,讲课时要先于自定义方法前介绍,讲课更流畅)
总结:枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象,例如可以调用WeekDay.SUN.getClass().getName和WeekDay.class.getName()。
普通方法实现枚举:
public class Ts
{
public static void main(String[]
args) {
[align=left] System. out.println(Weekday.mon);[/align]
[align=left] }[/align]
[align=left]}[/align]
abstract class Weekday
{
private Weekday()
{
[align=left] }[/align]
public final static Weekday mon = new Weekday()
{
[align=left] @Override[/align]
public Weekday
nextDay() {
// TODO Auto-generated
method stub
[align=left] return sun ;[/align]
[align=left] }[/align]
[align=left] @Override[/align]
publicString
toString() {
// TODO Auto-generated
method stub
[align=left] return "星期一" ;[/align]
[align=left] }[/align]
[align=left] };[/align]
public final static Weekday sun = new Weekday()
{
[align=left] @Override[/align]
public Weekday
nextDay() {
// TODO Auto-generated
method stub
[align=left] return mon ;[/align]
[align=left] }[/align]
[align=left] @Override[/align]
publicString
toString() {
// TODO Auto-generated
method stub
[align=left] return "星期三" ;[/align]
[align=left] }[/align]
[align=left] };[/align]
public abstract Weekday
nextDay();
[align=left] @Override[/align]
public abstractString
toString();
[align=left]}[/align]
[align=left]简单的枚举:[/align]
java.lang
类 Enum<E extends Enum<E>>
public class Ts
{
public static void main(String[]
args) {
[align=left] Weekday day = Weekday. Mon;[/align]
String | toString() 返回枚举常量的名称,它包含在声明中。 |
String | name() 返回此枚举常量的名称,在其枚举声明中对其进行声明。 |
int | ordinal() 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。 |
static
| valueOf(Class<T> enumType,String name) 返回带指定名称的指定枚举类型的枚举常量。 |
[align=left]获取数组:[/align]
[align=left] System. out.println(Weekday.values(). length);//7[/align]
[align=left] }[/align]
[align=left]}[/align]
enum Weekday
{
[align=left] Mon, Tue , The, Wer, Fri, Sta , Sun;[/align]
[align=left]}[/align]
[align=left]枚举的高级应用[/align]
枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。
枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。
带构造方法的枚举
构造方法必须定义成私有的
如果有多个构造方法,该如何选择哪个构造方法?
枚举元素MON和MON()的效果一样,都是调用默认的构造方法。
带方法的枚举
定义枚举TrafficLamp
实现普通的next方法
实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义。
增加上表示时间的构造方法
枚举只有一个成员时,就可以作为一种单例的实现方式。
public class Ts
{
public static void main(String[]
args) {
[align=left] TrafficLamp lamp = TrafficLamp. YRLLOW;[/align]
[align=left] System. out.println(lamp.nextLamp());//RED[/align]
[align=left] }[/align]
public enum TrafficLamp
{
[align=left] // 第一步RED{},GREEN{},YRLLOW{};[/align]
[align=left] // 第二步[/align]
RED(30)
{
[align=left] @Override[/align]
public TrafficLamp
nextLamp() {
// TODO Auto-generated
method stub
[align=left] return GREEN ;[/align]
[align=left] }[/align]
[align=left] },[/align]
GREEN(45)
{
[align=left] @Override[/align]
public TrafficLamp
nextLamp() {
// TODO Auto-generated
method stub
[align=left] return YRLLOW ;[/align]
[align=left] }[/align]
[align=left] },[/align]
YRLLOW(5)
{
[align=left] @Override[/align]
public TrafficLamp
nextLamp() {
// TODO Auto-generated
method stub
[align=left] return RED ;[/align]
[align=left] }[/align]
[align=left] };[/align]
[align=left] // 构造必须私有[/align]
private TrafficLamp()
{
[align=left] }[/align]
private TrafficLamp(int time)
{
[align=left] }[/align]
[align=left] // 抽象方法[/align]
public abstract TrafficLamp
nextLamp();
[align=left] }[/align]
[align=left]}[/align]
ASP.Net+Android+IO开发、.Net培训、期待与您交流!
相关文章推荐
- 黑马程序员:Java基础总结----枚举
- 【黑马程序员】java基础加强_枚举
- 黑马程序员_java第七天基础总结
- 黑马程序员——java基础加强高薪技术总结
- 黑马程序员——Java基础知识总结(超级经典)
- 黑马程序员--------Java基础知识总结(二)
- 黑马程序员:Java基础总结----类 Date 和类 Calendar
- 黑马程序员-Java基础总结08——集合与集合框架(…
- 黑马程序员学习log第五篇基础知识:JAVA的面向对象之集合总结
- 黑马程序员---java基础----面向对象总结
- 黑马程序员 知识点总结-Java JDK 1.5 新特性和枚举
- 黑马程序员:Java基础总结----类 File
- 黑马程序员---Java基础总结---语句、函数、数组
- 黑马程序员——Java基础--常见对象总结(三)
- 黑马程序员_Java编程学习日记01(开博之言、java编程基础知识总结)
- 黑马程序员_Java基础加强实现带有构造方法的枚举
- 黑马程序员_Java中的枚举总结
- 黑马程序员 Java基础难点总结day1
- 黑马程序员:Java基础总结----继承&抽象&接口
- 黑马程序员-java基础_枚举和反射