枚举是一种特殊类型
格式:
修饰符 enum 枚举名称{
每一行都是罗列枚举类实例的名称
}
enum Season{
SPRING,SUMMER,AUTUMN,WINTER;
}
用法:
比如开发超级玛丽,要接收上下左右四个方向的信号,控制玛丽的移动
如果用常量做信息标志和分类,入参值不受约束,代码相对不够严谨
枚举做信息标志和分类,代码可读性好,入参约束严谨
每个枚举都是在class内部实现的,所有枚举值都是public static final的
class Season{
public static final Season SPRING = new Season();
public static final Season SUMMER = new Season();
public static final Season AUTUMN = new Season();
public static final Season WINTER = new Season();
}
迭代枚举元素
package Experience;
public class enumDemo1 {
public enum enumDemo {
SPRING,SUMMER,AUTUMN,WINTER;
}
public static void main(String[] args) {
for(enumDemo a:enumDemo.values()){
System.out.println(a);
}
}
}
在switch中使用枚举类
package Experience;
public class enumDemo1 {
public enum enumDemo {
SPRING,SUMMER,AUTUMN,WINTER;
}
public static void main(String[] args) {
enumDemo b=enumDemo.AUTUMN;
switch (b){
case SPRING:
System.out.println("春天");
break;
case SUMMER:
System.out.println("夏天");
break;
case AUTUMN:
System.out.println("秋天");
break;
case WINTER:
System.out.println("冬天");
break;
}
}
}
枚举类的方法:
values():返回枚举类中所有的值
ordinal():找到每个枚举常量的索引,像数组索引一样
valueOf():返回指定字符串值的枚举常量
package Experience;
public class enumDemo1 {
public enum enumDemo {
SPRING,SUMMER,AUTUMN,WINTER;
}
public static void main(String[] args) {
enumDemo arr[]=enumDemo.values();
for(enumDemo b:arr){
System.out.println(b+"+"+b.ordinal());
}
System.out.println(enumDemo.valueOf("SPRING"));
}
}
枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。
枚举既可以包含具体方法,也可以包含抽象方法。 如果枚举类具有抽象方法,则枚举类的每个实例都必须实现它。
package Experience;
public class enumDemo1 {
public enum enumDemo {
SPRING,SUMMER,AUTUMN,WINTER;
private enumDemo(){
System.out.println(" for : " + this.toString());
}
public void Info()
{
System.out.println("ddd");
}
}
public static void main(String[] args) {
enumDemo c1 = enumDemo.WINTER;
System.out.println(c1);
c1.Info();
}
}