1.枚举类型的特点:
1. 是一个类,本身提供了一些方法
2.继承了Enum类,所以不能继承其他类
3.主要作用,定义个新的数据类型(和Class 稍微有些区别)
4.values()方法 比较特殊。
5.实现了 Comparable<E>, Serializable 2个接口
2.应用场景:
一般应用在需要一个新的数据类型,而且该数据内容相对固定,涉及到的业务逻辑不复杂的情况。
3.示例代码
package enumerated.randy;
/**
* @param args
*/
public class EnumTest {
// 定义一个enum
enum Color{
// 定义枚举内容
RED( "红色"),GREEN( "绿帽子"),YELLOW( "黄色文化");
//定义另外一个属性
private String desp;
// 注意该构造方法是私有的
private Color(String desp){
this.desp = desp;
}
// 定义另外一个方法
public String getDesp(){
return this.desp+ ":"+ this.name();
}
}
//switch 中的 枚举类型
public void change(){
switch(favorate){
case RED: favorate = Color.GREEN;
break;
case GREEN : favorate = Color.YELLOW;
break;
case YELLOW :favorate = Color.RED;
break;
}
}
public Color favorate = Color.RED;
public static void main(String[] args) {
System.out.println( "----------------枚举一些常用的方法---------------");
for(Color c :Color.values()){
System.out.println(c.getClass());
System.out.println(c.getDeclaringClass());
System.out.println(c.name()); //RED
System.out.println(c.compareTo(Color.RED));
System.out.println(c.ordinal());
System.out.println(c.equals(Color.RED));
System.out.println(c == Color.RED);
}
System.out.println( "----------------测试枚举类型中定义的方法-----");
for(Color c :Color.values()){
System.out.println(c.getDesp());
}
System.out.println( "-------------测试enum 的 switch 用法----------------------");
EnumTest test = new EnumTest();
Color color = Color.RED;
for( int i=0;i<=7;i++){
test.change();
System.out.println(test.favorate.getDesp());
}
}
}
/**
* @param args
*/
public class EnumTest {
// 定义一个enum
enum Color{
// 定义枚举内容
RED( "红色"),GREEN( "绿帽子"),YELLOW( "黄色文化");
//定义另外一个属性
private String desp;
// 注意该构造方法是私有的
private Color(String desp){
this.desp = desp;
}
// 定义另外一个方法
public String getDesp(){
return this.desp+ ":"+ this.name();
}
}
//switch 中的 枚举类型
public void change(){
switch(favorate){
case RED: favorate = Color.GREEN;
break;
case GREEN : favorate = Color.YELLOW;
break;
case YELLOW :favorate = Color.RED;
break;
}
}
public Color favorate = Color.RED;
public static void main(String[] args) {
System.out.println( "----------------枚举一些常用的方法---------------");
for(Color c :Color.values()){
System.out.println(c.getClass());
System.out.println(c.getDeclaringClass());
System.out.println(c.name()); //RED
System.out.println(c.compareTo(Color.RED));
System.out.println(c.ordinal());
System.out.println(c.equals(Color.RED));
System.out.println(c == Color.RED);
}
System.out.println( "----------------测试枚举类型中定义的方法-----");
for(Color c :Color.values()){
System.out.println(c.getDesp());
}
System.out.println( "-------------测试enum 的 switch 用法----------------------");
EnumTest test = new EnumTest();
Color color = Color.RED;
for( int i=0;i<=7;i++){
test.change();
System.out.println(test.favorate.getDesp());
}
}
}
枚举一些常用的方法
class enumerated.randy.EnumTest$Color
class enumerated.randy.EnumTest$Color
RED
0
0
true
true
class enumerated.randy.EnumTest$Color
class enumerated.randy.EnumTest$Color
GREEN
1
1
false
false
class enumerated.randy.EnumTest$Color
class enumerated.randy.EnumTest$Color
YELLOW
2
2
false
false
测试枚举类型中定义的方法-----
红色:RED
绿帽子:GREEN
黄色文化:YELLOW
测试enum 的 switch 用法
绿帽子:GREEN
黄色文化:YELLOW
红色:RED
绿帽子:GREEN
黄色文化:YELLOW
红色:RED
绿帽子:GREEN
黄色文化:YELLOW
class enumerated.randy.EnumTest$Color
class enumerated.randy.EnumTest$Color
RED
0
0
true
true
class enumerated.randy.EnumTest$Color
class enumerated.randy.EnumTest$Color
GREEN
1
1
false
false
class enumerated.randy.EnumTest$Color
class enumerated.randy.EnumTest$Color
YELLOW
2
2
false
false
测试枚举类型中定义的方法-----
红色:RED
绿帽子:GREEN
黄色文化:YELLOW
测试enum 的 switch 用法
绿帽子:GREEN
黄色文化:YELLOW
红色:RED
绿帽子:GREEN
黄色文化:YELLOW
红色:RED
绿帽子:GREEN
黄色文化:YELLOW
通过代码我们可以知道:
枚举类型: 除了可以定义【数据内容】之外,还可以添加另外的属性“desp" 和其他方法“getDesp()”.
注意,在“数据内容”后面有“;”
2.可以有构造方法,但是构造方法不能是public的,不管是有参数的,还是无参数的
3.从Enum 类 继承了若干方法,方便Enum 数据的访问。
4.values() 是一个静态方法,但是在Enum中不存在,只有一个带参数的values(Class class)。也就是说,values方法是在JVM 编译的时候添加的。
5. 注意 在switch 的case语句中,
case RED: favorate = Color.GREEN;
break;
case RED: favorate = Color.GREEN;
break;
不能写成 case Color.RED: favorate = Color.GREEN;
这一点有点蹊跷。 大概是switch(color) 已经确定了是Color 数据类型了。
本文转自 randy_shandong 51CTO博客,原文链接:http://blog.51cto.com/dba10g/293970,如需转载请自行联系原作者