黑马程序员-java-枚举
来源:互联网 发布:ubuntu恢复删除的文件 编辑:程序博客网 时间:2024/05/02 01:53
枚举是java5.0的新特性,首先枚举是一个类,它的每个成员是它的一个实例对象。所以,在比较两个枚举类型的值时,永远不需要调用
equals,而直接使用"=="看可以了。
看实例分析:
package com.enumtest;
import java.util.Arrays;
public class EnumTest
{
public enum WeekDay // 内部类
{
SUN(2), MON(1), TUE, WED, THR, FRI, SAT;
private WeekDay()
{
System.out.println("first");
}
private WeekDay(int x)
{
System.out.println("second");
}
}
public static void main(String[] args)
{
WeekDay week2 = WeekDay.FRI;
System.out.println(week2.TUE);
System.out.println(week2);
System.out.println(week2.name());
System.out.println(week2.ordinal());
System.out.println("valueof :" + week2.valueOf("SUN"));
System.out.println("-------------------------");
System.out.println(week2.values().length);
String str = Arrays.toString(week2.values());
System.out.println(str);
}
public enum TrafficLamp
{
RED(30) // RED 理解 由TrafficLamp 的一个子类实现
{
public TrafficLamp nextLamp()
{
return GREEN;
}
},
GREEN(45)
{
public TrafficLamp nextLamp()
{
return YELLOW;
}
},
YELLOW(5)
{
public TrafficLamp nextLamp()
{
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time)
{
this.time = time;
}
}
}
上面程序打印结果:
second
second
first
first
first
first
first
TUE
FRI
FRI
5
valueof :SUN
-------------------------
7
[SUN, MON, TUE, WED, THR, FRI, SAT]
分析:
程序首先定义了一个WeekDay枚举,它里面定义了7个实例,有2个构造方法,一个带参数,一个不带参数,
SUN(2)表示SUN实例是调用private WeekDay(int x)带参数的方法构造的。
WeekDay week2 = WeekDay.FRI;
程序开始运行,加载WeekDay构造7个实例,SUN(2), MON(1)是调用带参数构造方法构造,所以打印2个second,
后面5个实例打印first.
接着打印week2.TUE为TUE,week2为FRI不难理解,week2.name()为此枚举的名字打印FRI,
week2.ordinal()打印此枚举实例在枚举初始化时的位置,枚举初始化第一个实例的值为0,所以
FRI的ordinal()为5。
valueOf方法返回以枚举名字为参数的枚举实例,参数为"SUN",所以打印SUN.
values()方法返回次枚举中实例的数组表示,长度为7,week2.values().length打印值为7.
最后打印values()返回的枚举数组的字符串表示形式[SUN, MON, TUE, WED, THR, FRI, SAT]。
上面程序还有一个内部类枚举TrafficLamp,内含有一个抽象方法public abstract TrafficLamp nextLamp();
作为枚举内部的实例RED,GREEN,YELLOW必需要实现类的抽象方法,所以在枚举的内部加上抽象方法,可以让枚举
的每个实例以不同的实现方式实现,枚举中还可以定义自己的属性和方法。
看下面用普通类型模拟枚举的实现:
public class WeekDays
{
private WeekDays()
{
}
public WeekDays nextDay()
{
if (this == SUN)
return MON;
else
return SUN;
}
public static final WeekDays SUN = new WeekDays();
public static final WeekDays MON = new WeekDays();
public String toString()
{
return this == SUN ? "sun" : "mon";
}
}
枚举要限定对象实例的数量,要外面不能new,所以构造方法写成private,
WeekDays类中定义了2个static final的实例,SUN,MON,就是表示模拟枚举类中只能引用2个实例,
类中还可以定义自己的方法nextDay(),重写了toString方法。
看下面也是同样可以在类中定义抽象的方法,让每个类的实例去单独的实现:
private WeekDays(){}
public static final WeekDays SUN = new WeekDays(){
@Override
public WeekDays nextDay()
{
return MON;
}};
public static final WeekDays MON = new WeekDays(){
@Override
public WeekDays nextDay()
{
return SUN;
}};
public abstract WeekDays nextDay();
用抽象类和抽象方法把上面nextDay()方法中大量的if-else语句转移成一个个独立的类的具体实现了。
还有,如果枚举中只有一个成员就可以作为一种单例的实现方式,相信大家都能理解。好了,有关java的
枚举就介绍到这里了,谢谢。
- 黑马程序员-java-枚举
- 黑马程序员-java 枚举
- 黑马程序员java枚举
- 黑马程序员 Java枚举
- 黑马程序员-java枚举
- 黑马程序员---java枚举
- 黑马程序员----Java 枚举
- 黑马程序员java----枚举
- 黑马程序员-java基础 枚举
- 黑马程序员-java中的枚举
- 黑马程序员—JAVA枚举
- 黑马程序员--java枚举类型
- 黑马程序员---java 枚举类型
- 黑马程序员 Java高新技术---枚举
- 黑马程序员-java枚举总结
- 黑马程序员--java高新技术----枚举
- 黑马程序员------java高新技术、枚举
- 黑马程序员---高级java---枚举
- TextBox文本框中如何换行
- WIFI之四:WINCE 500上WIFI工具的编写
- 计算机类核心期刊排名
- 使用DATE时注意
- WIFI之三:WIN MOBILE平台上的88W8688驱动
- 黑马程序员-java-枚举
- 基于线程的WINCE测试程序
- 【android学习之九】——数据存储1:SharedPreferences,Files,网络
- C#将文本框中的字符串导出至txt文件中
- STL中vector转数组(实际是数组的指针)(zz)
- android Launcher——拖放功能深入研究
- WINCE的RTC驱动
- oracle常用SQL语句
- UART之三:PXA平台WIN MOBILE的UART底层