JDK1.5新特性是什么样的?
Enum的最简单形式,即类似于:
public enum Color {
Red,
Green,
Blue;
}
Enum是Sun全新引进的一个关键字,看起来很象是特殊的class,它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。 在声明一个enum类型时,应该注意到enum类型有如下的一些特征:
1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例;
2.所有枚举值都是public , static , final的。 (注意:这一点只是针对于枚举值,我们可以和在普通类里面定义变量一样定义其它任何类型的非枚举变量,这些变量可以用...全部
Enum的最简单形式,即类似于:
public enum Color {
Red,
Green,
Blue;
}
Enum是Sun全新引进的一个关键字,看起来很象是特殊的class,它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。
在声明一个enum类型时,应该注意到enum类型有如下的一些特征:
1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例;
2.所有枚举值都是public , static , final的。
(注意:这一点只是针对于枚举值,我们可以和在普通类里面定义变量一样定义其它任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。);
3.Enum默认实现了java。lang。Comparable接口;
4.Enum重载了toString方法,因此我们如果调用Color。
Blue。toString()默认返回字符串”Blue”;
5.Enum提供了一个valueOf方法,它和toString方法是相对应的。调用valueOf(“Blue”)将返回Color。Blue。
因此在重写toString方法的时候就要注意到这一点,一般来说应该相对应地重写valueOf方法;
6.Enum还提供了values方法,该方法可以方便的遍历所有的枚举值;
7.Enum还有一个oridinal的方法,该方法返回枚举值在枚举类中的顺序,这个顺序根据枚举值声明的顺序而定,这里Color。
Red。ordinal()返回0。
了解了这些基本特性,我们来看看如何使用它们。
1.遍历所有有枚举值。 知道了有values方法,我们可以轻车熟路地用ForEach循环来遍历了枚举值了。
for (Color c: Color。
values())
System。out。println(“find value:” + c);
2.在enum中定义方法和变量,比如我们可以为Color增加一个方法随机返回一个颜色。
public enum Color {
Red,
Green,
Blue;
/*
*定义一个变量表示枚举值的数目。
*(我有点奇怪为什么sun没有给enum直接提供一个size方法)。
*/
private static int number = Color。values()。length ;
/**
* 随机返回一个枚举值
@return a random enum value。
*/
public static Color getRandomColor(){
long random = System。currentTimeMillis() % number;
switch ((int) random){
case 0:
return Color。
Red;
case 1:
return Color。Green;
case 2:
return Color。Blue;
default : return Color。Red;
}
}
}
可以看出这在枚举类型里定义变量和方法和在普通类里面定义方法和变量没有什么区别。
唯一要注意的只是变量和方法定义必须放在所有枚举值定义的后面,否则编译器会给出一个错误。收起