1、枚举
*需要在一定的范围内取值,这个值只能是这个范围内中的任意一个
*现实场景:交通信号灯,三种颜色,只能亮一个
*枚举类
名称1,名称2,名称3;
-每一个都是一个对象
-enum{RED,GREEN,YELLOW;}
*特殊枚举的操作
-在枚举里面有构造方法
构造方法里面有参数,需要在每个实例上面都写参数
-在枚举类有抽象方法
在枚举的每个实例里面都重写这个抽象方法
*代码演示
public class Enum {
//传统方式
private int color;
//第二种方式
private Color2 color2;
//第三种方法jdk5.0新特性
private Color3 color3;
public void test(){
this.color = Color1.GREEN;
this.color2 = Color2.GREEN;
this.color3 = Color3.GREEN;
}
}
class Color1{
public static final int RED =1;
public static final int GREEN =2;
public static final int YELLOW =3;
}
class Color2{
//构造方法私有化
private Color2(){}
public static final Color2 RED = new Color2();
public static final Color2 GREEN = new Color2();
public static final Color2 YELLOW = new Color2();
}
enum Color3{
RED,GREEN,YELLOw;
}
enum Color4{
//重写构造函数
RED("red"){
@Override
public void print1() {
// TODO Auto-generated method stub
}
},YELLOW("yellow"){
@Override
public void print1() {
// TODO Auto-generated method stub
}},GREEN("green"){
@Override
public void print1() {
// TODO Auto-generated method stub
}};
private Color4(String name){}
//抽象方法
public abstract void print1();
}
*枚举类的API
-java中声明的枚举类,均是java.lang.Enum类中孩子,继承了Enum所有的方法。
-常用方法
--name():返回枚举对象名称
--ordinal():返回枚举对象下标
--valueOf(Class enumClass ,String name):转换枚举对象
-自定义枚举类,在编译阶段自动生成下面方法
--valueOf(String name)转换枚举对象
--values():获取所有枚举对象数组
-枚举对象、枚举对象下标、枚举对象名称之间转换
*代码演示
public class TestEnum {
//知道枚举的下标,获取枚举的对象和名称
@Test
public void test3(){
int index = 2;
//得到枚举对象
Color[] c = Color.values();
//根据下标的得到对象
Color c2 = c[index];
//得到枚举名称
String name = c2.name();
System.out.println("Name:"+name);
}
//知道枚举的名称,得到枚举的对象和下标
@Test
public void test2(){
String name = "GREEN";
//得到对象
Color gre = Color.valueOf(name);
//得到下标
int index = gre.ordinal();
System.out.println("index:"+index);
}
//知道枚举的对象,得到枚举名称和下标
@Test
public void test1(){
//得到枚举对象
Color c = Color.GREEN;
//枚举名称
String name = c.name();
//枚举下标
int index = c.ordinal();
System.out.println(name+"--"+index);
}
}
enum Color{
RED,GREEN,YELLOW;
}