枚举
1.枚举是一种特殊的类,其中的所有变量(其实都是常量)
2.都是当前枚举类型的常量对象。
3.在外部是不能new枚举对象,只能从该枚举中读。
4.一个枚举常量仅包含一个数据时,直接使用默认(空参)构造方法
5.枚举变量的值必须是枚举中那些常量当中的一个
eg
public enum SexEnum {
male,female,others
}
public class Client {
public static void main(String[] args) {
SexEnum a= SexEnum.male;
System.out.println(a);
System.out.println("-----------------");
//遍历出枚举中的所有常量
SexEnum ar[] = SexEnum.values();
for(SexEnum x: ar){
System.out.println(x);
}
}
以上是枚举普通的用法,接下来是枚举更高级的用法:
1.如果每个枚举常量对象中包含多个数据,那么得自己写自定义构造方法。否则该枚举中只有默认构造方法,它只能构造一个空参对象,无法封装多个数据
2.枚举中的构造方法是用来构造枚举常量(对象)的,因此形参列表要和常量(对象)声明的格式一致
3.为了外面使用枚举类能够获取枚举常量(对象)中的数据信息,必须在枚举类中声明相应属性变量
4.枚举中的构造方法全是private—我们不写,Java也会帮我们加
5.枚举通常是定义一些常量对象的,这些对象的信息一般是不变的,
因此属性变量通常要声明成final,否则外面可以更改这些属性.如果一个 属性声明成final,则该属性不能有setter方法
6.如果枚举常量之后要添加属性变量、构造方法等内容,那么必须在最后一个常量对象后面添加”;”号—如果后面不添加代码,则可以省略这个分号
7.枚举中可以添加其它自定义方法,也可以访问Object中的方法
public enum Color {
RED("红色", 1), GREEN("绿色", 2), YELLOW("黄色", 3);
final private String name;
final private int index;
Color(String name, int index) { //该构造方法自动会把每个常量对象中的数据传给属性变量:name,index
this.name = name;
this.index = index;
}
public String getName() {
return name;
}
public int getIndex() {
return index;
}
@Override
public String toString() {
return name+","+index;
}
}
public class Client {
public static void main(String[] args) {
Color c = Color.GREEN;
//Color c = new Color("aa",4);//WA,不能new
System.out.println(c.getName());
System.out.println(c);
System.out.println("---------------");
for(Color cc: Color.values()){
System.out.println(cc);
}
}
}