1. 枚举
(1) 枚举是一种特殊的类
(2) 格式:修饰符 enum 枚举类名{
名称一,名称二....;
其他成员....
}
public enum A {
//第一行必须罗列枚举对象的名字
A, B, C;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public static void main(String[] args) {
A a1 = A.A;
System.out.println(a1);//A
}
(3) 枚举类的特点:
① 枚举类的第一行只能罗列一些名称,这些名称都是常量,并且每个常量记住的都是枚举类的一个对象。
② 枚举类的构造器都是私有的(写不写都只能是私有的),枚举类不能创建对象。
③ 枚举都是最终类,不可以被继承。
④ 枚举类中,从第二行开始,可以定义类的其他各种成员
⑤ 编译器为枚举类新增了几个方法,并且枚举类都是继承:Java.lang.Enum类的,从enum类也会继承到一些方法
public static void main(String[] args) {
A a1 = A.A;
System.out.println(a1);//A
//1.枚举类的构造器都是私有的,不能对外创建对象
//A a = new A();
//2. 枚举类的第一行都是常量,记住的是枚举类的对象
A a2 = A.B;
System.out.println(a2);//B
//3.枚举提供一些额外的api
A[] as = A.values();//拿到全部对象
System.out.println(as.toString());
A a3 = A.valueOf("C");
System.out.println(a3.name());//c
System.out.println(a3.ordinal());//索引 2
}
2. 枚举实现单例
public enum A {
A
//可以写一些成员方法或成员变量
}
3. 抽象枚举
//抽象枚举
public enum B {
//:第一行的枚举对象 需要重写抽象方法
A("卡莎"){
@Override
public void run() {
System.out.println(A.getName());
}
}, B(){
@Override
public void run() {
}
}, C(){
@Override
public void run() {
}
};
private String name;
B() {
}
B(String name) {
this.name = name;
}
public abstract void run();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public static void main(String[] args) {
B b1 = B.A;
b1.run();//卡莎
}
4. 常见的应用场景
用来表示一组信息,然后作为参数进行传输
public enum NumberEnum {
NUM1,
NUM2,
NUM3,
NUM4,
NUM5,
NUM6,
NUM7;
}
public class Test {
public static void main(String[] args) {
xiqing(NumberEnum.NUM1);//星期一
}
public static void xiqing(NumberEnum numberEnum) {
switch (numberEnum){
case NUM1:
System.out.println("星期一");
break;
case NUM2:
System.out.println("星期二");
break;
case NUM3:
System.out.println("星期三");
break;
case NUM4:
System.out.println("星期四");
break;
case NUM5:
System.out.println("星期五");
break;
case NUM6:
System.out.println("星期六");
break;
case NUM7:
System.out.println("星期日");
break;
}
}
}