黑马程序员_ Java高新技术——深入Java枚举机制
2013-02-11 17:02
260 查看
------- android培训、java培训、期待与您交流! ----------
一、枚举作用的介绍
所谓的“枚举”,其实就是让某个类型变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时期就控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
二、用普通类模拟枚举实现的原理
由于在实际的开发中,程序中经常免不了要用到时间问题,为了更好的统一表示“星期几”这个问题,我们可以自定义一个WeekDay类,具体代码如下:
public class EnumTest {
public static void main(String[] args) {
WeekDay weekDay2 = WeekDay.FRI;
System.out.println(weekDay2);
}
public enum WeekDay{
SUN(1),MON(),TUE,WED,THI,FRI,SAT;
private WeekDay(){System.out.println("first");}
private WeekDay(int day){System.out.println("second");}
}
}
三、枚举的基本应用
1、int compareTo(E o)
比较此枚举与指定对象的顺序。
2、boolean equals(Object other)
当指定对象等于此枚举常量时,返回 true。
3、Class<E> getDeclaringClass()
返回与此枚举常量的枚举类型相对应的 Class 对象。
4、int hashCode()
返回枚举常量的哈希码。
5、String name()
返回此枚举常量的名称,在其枚举声明中对其进行声明。
6、int ordinal()
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
7、String toString()
返回枚举常量的名称,它包含在声明中。
8、static <T extends Enum<T>>
T valueOf(Class<T> enumType, String name)
返回带指定名称的指定枚举类型的枚举常量。
9、示例代码如下:
import java.util.Date;
public class EnumTest {
public static void main(String[] args) {
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(1),MON(),TUE,WED,THI,FRI,SAT;
private WeekDay(){System.out.println("first");}
private WeekDay(int day){System.out.println("second");}
}
}
四、实现带有构造方法的枚举
事实上,由于枚举中的每一个成员都是一个对象,由于是对象就可以初始化,所以就要调用构造方法,常见的枚举类型都没有书写构造方法,但那并不代表就没有构造方法,它只是调用了默认的空的构造方法而已。下面我们就书写一下拥有构造方法的枚举:
具体代码如下:
import java.util.Date;
publicclass EnumTest {
publicstaticvoid main(String[] args) {
}
publicenum TrafficLamp{
RED(30),
GREEN(45),
YELLOW(5);
privateinttime;
private TrafficLamp(int time){this.time = time;}
}
}
五、实现带有抽象方法的枚举
既然枚举中的每一个成员都是一个对象,那么当我们定义了一个抽象方法时,它自然也要实现此抽象方法了,下面我们就做演示;
具体代码如下:
import java.util.Date;
publicclass EnumTest {
publicstaticvoid main(String[] args) {
}
publicenum TrafficLamp{
RED(30){
public TrafficLamp nextLamp(){
returnGREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
returnYELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
returnRED;
}
};
publicabstract TrafficLamp nextLamp();
privateinttime;
private TrafficLamp(int time){this.time = time;}
}
}
一、枚举作用的介绍
所谓的“枚举”,其实就是让某个类型变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时期就控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
二、用普通类模拟枚举实现的原理
由于在实际的开发中,程序中经常免不了要用到时间问题,为了更好的统一表示“星期几”这个问题,我们可以自定义一个WeekDay类,具体代码如下:
public class EnumTest {
public static void main(String[] args) {
WeekDay weekDay2 = WeekDay.FRI;
System.out.println(weekDay2);
}
public enum WeekDay{
SUN(1),MON(),TUE,WED,THI,FRI,SAT;
private WeekDay(){System.out.println("first");}
private WeekDay(int day){System.out.println("second");}
}
}
三、枚举的基本应用
1、int compareTo(E o)
比较此枚举与指定对象的顺序。
2、boolean equals(Object other)
当指定对象等于此枚举常量时,返回 true。
3、Class<E> getDeclaringClass()
返回与此枚举常量的枚举类型相对应的 Class 对象。
4、int hashCode()
返回枚举常量的哈希码。
5、String name()
返回此枚举常量的名称,在其枚举声明中对其进行声明。
6、int ordinal()
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
7、String toString()
返回枚举常量的名称,它包含在声明中。
8、static <T extends Enum<T>>
T valueOf(Class<T> enumType, String name)
返回带指定名称的指定枚举类型的枚举常量。
9、示例代码如下:
import java.util.Date;
public class EnumTest {
public static void main(String[] args) {
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(1),MON(),TUE,WED,THI,FRI,SAT;
private WeekDay(){System.out.println("first");}
private WeekDay(int day){System.out.println("second");}
}
}
四、实现带有构造方法的枚举
事实上,由于枚举中的每一个成员都是一个对象,由于是对象就可以初始化,所以就要调用构造方法,常见的枚举类型都没有书写构造方法,但那并不代表就没有构造方法,它只是调用了默认的空的构造方法而已。下面我们就书写一下拥有构造方法的枚举:
具体代码如下:
import java.util.Date;
publicclass EnumTest {
publicstaticvoid main(String[] args) {
}
publicenum TrafficLamp{
RED(30),
GREEN(45),
YELLOW(5);
privateinttime;
private TrafficLamp(int time){this.time = time;}
}
}
五、实现带有抽象方法的枚举
既然枚举中的每一个成员都是一个对象,那么当我们定义了一个抽象方法时,它自然也要实现此抽象方法了,下面我们就做演示;
具体代码如下:
import java.util.Date;
publicclass EnumTest {
publicstaticvoid main(String[] args) {
}
publicenum TrafficLamp{
RED(30){
public TrafficLamp nextLamp(){
returnGREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
returnYELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
returnRED;
}
};
publicabstract TrafficLamp nextLamp();
privateinttime;
private TrafficLamp(int time){this.time = time;}
}
}
相关文章推荐
- 黑马程序员 java高新技术<二>--java5的枚举、反射的深入讲解
- 黑马程序员_Java高新技术_反射的深入探究
- 黑马程序员--java高新技术--类加载器的深入讲解与应用
- 黑马程序员_java高新技术总结【1】(枚举和部分java新特性)
- 黑马程序员--java高新技术--动态代理技术的深入讲解
- 黑马程序员-----Java高新技术-----Java反射机制深入详解
- 黑马程序员_java高新技术_枚举与反射
- 黑马程序员_Java高新技术(静态导入、可变参数、增强for循环、自动拆装箱、枚举、反射)
- 黑马程序员 Java高新技术-jdk1.5深入反射和泛型
- 黑马程序员--java高新技术 25--枚举,反射
- java高新技术_枚举反射内省(黑马程序员)
- Java高新技术-枚举和反射-----黑马程序员
- 黑马程序员_java学习日记_Java高新技术_枚举
- Java深入(高新技术)(三):枚举
- 黑马程序员—【Java高新技术】之eclipse开发工具枚举及JDK1.5新特性
- 黑马程序员_java高新技术--枚举
- 黑马程序员_java学习日记_Java高新技术_枚举
- 黑马程序员________Java高新技术之反射机制及枚举注释
- 黑马程序员_Java高新技术_动态代理技术的深入理解
- 【黑马程序员】黑马入学准备篇:Java高新技术之 静态导入、可变参数、增强for循环、自动装箱、枚举