package Ttest;
public class Enum_Test{
/*最普通的枚举*/
public enum ColorSelected{
red, green, blue, yellow
}
/* 枚举也可以象一般的类一样添加方法和属性
* ,你可以为它添加静态和非静态的属性或方法,
* 这一切都象你在一般的类中做的那样. */
public enum Season{
// 枚举列表必须写在最前面,否则编译出错
spring, summer, fall, winter;
static String location = "hangzhou";
public static Season getLocation() {
if (location.equals("hangzhou")) {
return fall;
}
return summer;
}
}
//带构造方法的枚举
public enum Temp{
/*通过括号赋值,而且必须有带参构造器和一属性跟方法,否则编译出错
* 赋值必须是都赋值或都不赋值,不能一部分赋值一部分不赋值
* 如果不赋值则不能写构造器,赋值编译也出错*/
a(13),b(14),c(15);
private final int value;
public int getValue() {
return value;
}
//构造器默认也只能是private, 从而保证构造函数只能在内部使用
Temp(int value){
this.value = value;
}
}
public static void main(String[] args) {
/*
* 枚举类型是一种类型,用于定义变量,以限制变量的赋值 赋值时通过"枚举名.值"来取得相关枚举中的值
*/
ColorSelected color = ColorSelected.blue;
switch (color) {
/*注意:枚举重写了ToString(),说以枚举变量的值是不带前缀的
*所以为blue而非ColorSelect.blue
*/
case blue:
System.out.println("i chose blue");
break;
case red:
System.out.println("i chose red");
break;
default:
System.out.println("i chose what i really don't like one");
break;
}
//增强的for循环
System.out.println("遍历ColorSelected中的值");
/*通过values()获得枚举值的数组*/
for(ColorSelected tempcColorSelected : ColorSelected.values())
{
System.out.println(tempcColorSelected);
}
/*ordinal()返回枚举值在枚举中的索引位置,从0开始*/
System.out.println(ColorSelected.blue.ordinal());
/*枚举默认实现了java.lang.Comparable接口*/
System.out.println(ColorSelected.red.compareTo(ColorSelected.blue));
System.out.println(Season.getLocation());
for(Temp t:Temp.values())
{
System.out.print(t.getValue()+" ");
}
}
}
像定义类一样去定义枚举类型,ColorSelected枚举类是一个类,而且是一个不可继承的final类,其枚举值也是静态常量。
ColorSelected color = ColorSelected.blue;
就是创建了一个实例
构造器只能私有private,绝对不允许有public构造器。 这样可以保证外部代码无法新构造枚举类的实例。这也是完全符合情理的,因为我们知道枚举值是public static final的常量而已。 但枚举类的方法和数据域可以允许外部访问。
、所有枚举类都继承了Enum的方法,下面我们详细介绍这些方法。
(1) ordinal()方法: 返回枚举值在枚举类种的顺序。这个顺序根据枚举值声明的顺序而定。
Color.RED.ordinal(); //返回结果:0
Color.BLUE.ordinal(); //返回结果:1
(2) compareTo()方法: Enum实现了java.lang.Comparable接口,因此可以比较象与指定对象的顺序。Enum中的compareTo返回的是两个枚举值的顺序之差。当然,前提是两个枚举值必须属于同一个枚举类,否则会抛出ClassCastException()异常。(具体可见源代码)
Color.RED.compareTo(Color.BLUE); //返回结果 -1
(3) values()方法: 静态方法,返回一个包含全部枚举值的数组。
Color[] colors=Color.values();
for(Color c:colors){
System.out.print(c+",");
}//返回结果:RED,BLUE,BLACK YELLOW,GREEN,
(4) toString()方法: 返回枚举常量的名称。
Color c=Color.RED;
System.out.println(c);//返回结果: RED
(5) valueOf()方法: 这个方法和toString方法是相对应的,返回带指定名称的指定枚举类型的枚举常量。
Color.valueOf("BLUE"); //返回结果: Color.BLUE
(6) equals()方法: 比较两个枚举类对象的引用。