一个类中的对象 认为个数有限且固定的 可以将每一个对象一一列举出来
    即在枚举类中直接列举对象

    JDK1.5版本后可以直接定义enum类型
    我们自己定义的enum类型 直接默认继承Enum类(java.lang包)
    我们自己定义的enum类型不能再extends继承其他类 但是可以implements实现
    Enum类型
    有两个属性
    name——>枚举对象的名字
    name()来获取name属性
    ordinal——>枚举对象在类中罗列的顺序 类似于index 从0 开始
    ordinal()获取序号

    一些常用的方法
    valueOf() 通过给定的name获取对应的枚举对象
    values() (源码中没有 是在虚拟机加载的时候 执行程序前手动放里面的)
    获取全部的枚举对象——>返回一个数组 Day[]
    compareTo() 可以比较两个枚举对象 返回值是int
    如 monday.compareTo(tuesday)—->返回值是负的
    monday.compareTo(monday)—->返回值是0的
    tuesday.compareTo(monday)—->返回值是正的
    ToString() 由于这个方法没有用final修饰 可以重写(覆盖)
    还有一些从Object继承过来的方法 但是都加了final修饰 不可修改

    我们也可以在enum中描述自己的属性或方法
    必须在enum类中第一行 描述一下枚举的样子 最后需要分号结束
    可以定义自己的属性
    类创建的过程中 就已经帮我们创建了枚举类型的对象(私有的构造方法)
    若想创建枚举样子的对象 所以我们需要给枚举类型提供对应样子的构造方法 且构造方法只能用private修饰
    方法可以重载

    没有枚举类型前 是这样设计的:

    1. package test_enum;
    2. public class MyDay {//描述星期 共七个
    3. //类似单例模式的想法
    4. //公有的静态常量作为属性
    5. //公有保证对象能调得到,不用再写一个方法 静态保证对象唯一 final保证对象不能随意修改
    6. public static final MyDay monday = new MyDay();
    7. public static final MyDay tuesday = new MyDay();
    8. public static final MyDay wednesday = new MyDay();
    9. public static final MyDay thursday = new MyDay();
    10. public static final MyDay friday = new MyDay();
    11. public static final MyDay saturday = new MyDay();
    12. public static final MyDay sunday = new MyDay();
    13. //构造方法私有 别人就不能创建对象了
    14. private MyDay(){}
    15. //一般属性 一般方法都可以随意设计
    16. }

    有了枚举类型后:

    1. package test_enum;
    2. public enum Day{
    3. //描述了七个当前类的对象
    4. monday,tuesday,wednesday,thursday,friday,saturday,sunday
    5. }

    枚举类型中描述自己的属性或方法:

    1. package test_enum;
    2. public enum Day{
    3. //描述了七个当前类的对象
    4. monday("星期一",1),tuesday,wednesday,thursday,friday,saturday,sunday;
    5. private String name;
    6. private int index;
    7. private Day(){}
    8. private Day(String name,int index){
    9. this.name = name;
    10. this.index = index;
    11. }
    12. public String getName(){
    13. return this.name;
    14. }
    15. public void setName(String name){
    16. this.name = name;
    17. }
    18. }

    主方法:

    1. package test_enum;
    2. public class RunMain {
    3. public static void main(String[] args){
    4. MyDay myDay = MyDay.monday;//因为属性是对象 所以需要对象来接受
    5. Day day = Day.monday;//enum定义的
    6. //Day 默认继承的是Object类
    7. //除了继承Object类的方法外 还有一些另外的方法 其默认继承的Enum类
    8. //我们自己定义的每一个enum类型 都会默认继承Enum类 间接继承Object类(Enum类中重写了Object类的方法)
    9. //所以不能再继承其他类
    10. Day[] days = Day.values();//获取全部枚举对象
    11. for(Day d:days){
    12. System.out.println(d.name()+"---"+d.ordinal());
    13. }
    14. Day day1= Day.valueOf("monday");//调用静态方法valueOf 通过name叫monday的 找到一个对象
    15. System.out.println(day1.name()+"---"+day.ordinal());
    16. }
    17. }

    swiitch内部判断枚举的应用:

    1. public static void main(String[] args){
    2. Scanner input = new Scanner(System.in);
    3. System.out.println("请输入一个星期中的英文单词:");
    4. String key = input.nextLine();
    5. Day day = Day.valueOf(key);
    6. switch (day){
    7. case monday:
    8. System.out.println("您输入的是星期一");
    9. break;
    10. case tuesday:
    11. System.out.println("您输入的是星期二");
    12. break;
    13. case wednesday:
    14. System.out.println("您输入的是星期三");
    15. break;
    16. case thursday:
    17. System.out.println("您输入的是星期四");
    18. break;
    19. case friday:
    20. System.out.println("您输入的是星期五");
    21. break;
    22. case saturday:
    23. System.out.println("您输入的是星期六");
    24. break;
    25. case sunday:
    26. System.out.println("您输入的是星期天");
    27. break;
    28. default:
    29. System.out.println("输入错误");
    30. }
    31. }