枚举 --java学习笔记
什么是枚举
���举是一种特殊类
格式:
修饰符 enum 枚举类名{
名称1,名称2,...; //枚举类的第一行必须罗列的是枚举对象的名字
其他成员...
}
- 枚举类的第一行只能罗列一些名称,这些名称都是常量,并且每个常量记住的都是枚举类的一个对象
- 枚举类的构造器都是私有的(写不写都只能是私有的),因此,枚举类对外不能创建对象
- 枚举都是最终类,不可以被继承
- 枚举类中,从第二行开始,可以定义类的其他各种成员
- 编译器为枚举类新增了几个方法,并且枚举类都是继承:java.lang.Enum类的,从enum类也会继承到一些方法
- 枚举的应用场景:做信息标志和分类
例:
public enum A { A,B,C; //罗列枚举对象的名字 private String name; public void setName(String name) { this.name = name; } public void Myname(){ System.out.println(this.name); } }
public class Test { public static void main(String[] args) { A a = A.B; //枚举类对象创建,使用罗列的枚举对象名字 a.setName("小明"); //类方法正常使用 a.Myname(); //编译器为枚举类新增的和从enum类继承到的一些方法 A[] as = A.values(); //拿到全部对象 A a2 = A.valueOf("C"); //根据名字拿到对象 System.out.println(a2.name()); //拿到对象名字 C System.out.println(a2.ordinal()); //拿到对象索引 2,也就是罗列名字时的顺序,从0开始 } }
抽象枚举
也就是带有抽象方法的枚举类,需要在罗列对象名字时实现该抽象方法
例:
public enum B { //抽象枚举 X{ @Override //实现抽象方法 public void say() { } } ,Y("小明"){ //通过有参构造器赋初值 @Override public void say() { System.out.println("我是"+getName()); } }; private String name; B() { } B(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public abstract void say(); //抽象方法 }
public class Test2 { public static void main(String[] args) { B b = B.Y; b.say(); } }
The End