zoukankan      html  css  js  c++  java
  • javaSE 枚举

    本节内容

    一、认识枚举

      枚举就是要让某个类型的变量的取值只能为若干个固定的一个,否则编译器就会报错,枚举可以让编译器在编译阶段就可以控制源程序赋给的非法值,使用普通变量的方式在开发阶段无法实现这一目标

    在jdk1.5之后,使用关键字enum定义一种新的类型,称为枚举类型。

    二、Enum类与enum关键字

    使用enum关键字定义的枚举类,实际相当于一个类,次类继承了Enum类而已,Enum类中定义了如下方法:

    protected Enum(String name,int ordinal) 次构造方法不能被外部直接调用,只能被其子类访问,此构造方法为自动调用
    public final String name() 枚举的名字
    public final int ordinal() 枚举的序号

    三、Enum入门

    package com.wuzhilong;
    
    /**
     * 枚举
     */
    public enum Color {
    
        RED,GREED,YELLOW;
    
       
    }
    1. enum和class、interface的地位一样
    2. 使用enum定义的枚举类默认继承了java.lang.Enum,而不是继承Object类。枚举类可以实现一个或多个接口。
    3. 枚举类的所有实例都必须放在第一行展示,不需使用new 关键字,不需显式调用构造器。自动添加public static final修饰。
    4. 使用enum定义、非抽象的枚举类默认使用final修饰,不可以被继承。
    5. 枚举类的构造器只能是私有的

    四、枚举类简绍

    枚举类内也可以定义属性和方法,可是是静态的和非静态的

    package com.wuzhilong;
    
    /**
     * 枚举
     */
    public enum Color {
    
        RED("红色"),GREED("绿色"),YELLOW("黄色");
    
        private final String name;
    
        private Color(String name){
            this.name=name;
        }
    
        public String getName() {
            return name;
        }
    }

    实际上在第一行写枚举类实例的时候,默认是调用了构造器的,所以此处需要传入参数,因为没有显式申明无参构造器,只能调用有参数的构造器。

      构造器需定义成私有的,这样就不能在别处申明此类的对象了。枚举类通常应该设计成不可变类,它的Field不应该被改变,这样会更安全,而且代码更加简洁。所以我们将Field用private final修饰。

    五、枚举可以在switch中使用:

    java5新增了enum关键字,同时扩展了switch。

    package enumcase;
    
    public class SeasonTest {
        public void judge(SeasonEnum s)
        {
            switch(s)
            {
            case SPRING:
                System.out.println("春天适合踏青。");
                break;
            case SUMMER:
                System.out.println("夏天要去游泳啦。");
                break;
            case FALL:
                System.out.println("秋天一定要去旅游哦。");
                break;
            case WINTER:
                System.out.println("冬天要是下雪就好啦。");
                break;
            }
        }
        
        public static void main(String[] args) {
            SeasonEnum s = SeasonEnum.SPRING;
            SeasonTest test = new SeasonTest();
            test.judge(s);
        }
    }

    case表达式中直接写入枚举值,不需加入枚举类作为限定。

    六、枚举实现接口

    所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类,但是枚举可以实现一个或者多个接口,需要实现接口中的抽象方法。

    package com.wuzhilong;
    
    /**
     * 枚举
     */
    public  enum Color implements MyEnum{
    
        RED("红色"){
            @Override
            public String say() {
                return null;
            }
        },GREED("绿色"){
            @Override
            public String say() {
                return null;
            }
        },YELLOW("黄色"){
            @Override
            public String say() {
                return null;
            }
        };
    
        private final String name;
    
        private Color(String name){
            this.name=name;
        }
    
        public String getName() {
            return name;
        }
    
        @Override
        public String show() {
            return null;
        }
    
    
    }

    枚举类中也可以写抽象方法,但是每个枚举必须去重写这个抽象方法。

    七、枚举集合类的使用

    java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。关于这个两个集合的使用就不在这里赘述,可以参考JDK文档。

  • 相关阅读:
    51Nod 1007 正整数分组(01背包)
    二叉树层次遍历(以先序输入)
    HttpContext.Current.Request.Url
    SqlDataReader和SqlDataAdapter的区别
    DataSet和DataTable详解
    DataTable和DataSet什么区别
    Git 忽略
    hack速查表
    ie6常见css bug
    详说 IE hasLayout
  • 原文地址:https://www.cnblogs.com/wuzhilong/p/9953292.html
Copyright © 2011-2022 走看看