一:认识枚举
1.枚举是一种特殊类。
2.枚举的格式:
public enum A {
X, Y;
private String name;
A() {
}
A(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
使用:
运行结果会得到X。
注意:枚举类中的第一行,只能写一些合法的标识符(名称),多个名称用逗号隔开。
这些名称,本质是常量,每个常量都会记住枚举类的一个对象。
因为在此罗列对象时会调用枚举类中的构造器(默认是有一个无参构造器)若没有无参构造器则必须要调用有参构造器。
3.枚举类的特点:
枚举类的第一行只能罗列一些名称,这些名称都是常量,并且每个常量记住的都是枚举类的一个对象。
枚举类的构造器都是私有的(写不写都只能是私有的),因此,枚举类对外不能创建对象。
枚举类都是最终类,不可以被继承。
枚举类中,从第二行开始,可以定义类的其他各种成员。
编译器为枚举类新增了几个方法,并且枚举类都是继承:java.lang.Enum类的,从enum类也会继承到一些方法。
方法一:枚举类名[] 变量名 = 枚举类名.values(); 拿到全部对象。
方法二:枚举类名 变量名 = 枚举类名.valueof();根据枚举的常量名得到枚举对象。
方法三:System.out.println(变量名.ordinal());拿取变量相对应常量的索引。
)
二:扩展:抽象枚举
1.抽象枚举不能够直接罗列对象,因为它不能创建对象,因此想要罗列对象,需要在它内部将下方的抽象方法进行重写。
public enum B {
X("王凯"){
@Override
public void go(){
System.out.println(getName()+"跑的快");
}
},Y(){
@Override
public void go(){
}
};
String name;
public abstract void go();
B() {
}
B(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
使用:
运行结果为:王凯跑的快
可以使用枚举来实现单例设计模式。
三:枚举的应用场景:用来表示一组信息,然后作为参数传递。
1.选择定义一个一个的常量来表示一组信息,并作为参数传递。
参数值不受约束。
public class C {
public static final int BOY = 0;
public static final int GIRL = 1;
}
public class study {
public static void main(String[] args) {
check(C.BOY);
}
public static void check(int sex){
switch (sex){
case C.BOY:
System.out.println("喜欢打游戏");
break;
case C.GIRL:
System.out.println("喜欢看电视");
break;
}
}
}
2.选择定义枚举表示一组信息,并作为参数传递。
代码可读性好,参数值受到了约束,对使用者更友好,建议使用!
public enum C {
BOY,GIRL;
}
public class study {
public static void main(String[] args) {
check(C.BOY);
}
public static void check(C c){
switch (c){
case BOY:
System.out.println("喜欢打游戏");
break;
case GIRL:
System.out.println("喜欢看电视");
break;
}
}
}