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

    在某些情况下,一个类的对象是有限而且是固定的,比如季节类,它只有4个对象;再比如星期类,它只有7个对象。这种实例有限而且固定的类,在java里被称为枚举类

    如何手动实现枚举类

    如果需要手动实现枚举类,可以采用如下设计方式。
    通过private将构造器隐藏起来。把这个类的所有可能实例都使用public static final修饰的类变量来保存。
    如果有必要,可以提供一些静态方法,允许其他程序根据特定参数来获取与之匹配的实例。

    手动实现枚举类代码:

    public class Season {
    /**
    * 手动实现枚举类
    * @param args
    */
    private String name;

    private Season(String name) {
    this.name = name;
    }
    public String getName(){
    return name;
    }
    public static final Season SPIRNG=new Season("春天");
    public static final Season SUMMER=new Season("夏天");
    public static final Season FALL=new Season("秋天");
    public static final Season WINTER=new Season("冬天");
    public static Season getSeason(int i){
    if(i==1){
    return SPIRNG;
    }
    if(i==2){
    return SUMMER;
    }
    if(i==3){
    return FALL;
    }
    if(i==4){
    return WINTER;
    }
    return null;
    }
    }

    测试类:

    public class SeasonTest {
    /**
    * 手动实现枚举类
    * @param args
    */
    public static void main(String[] args) {
    Season season=Season.getSeason(2);
    System.out.println(season.getName());
    }

    }

    定义枚举类语法
    public enum SeasonEnum{
     // 在第一行列出4个枚举实例
     SPRING,SUMMER,FALL,WINTER; 
    // 等同于 public static final SeasonEnum SPRING = new 
        // SeasonEnum();
    }

    枚举类详解

    所有的枚举值之间以英文逗号(,)隔开,枚举值列举结束后以英文分号作为结束。这些枚举值代表了该枚举类的所有可能的实例。

    如果需要使用该枚举类的某个实例,则可使用EnumClass.variable的形式,如SeasonEnum.SPRING。
    经过enum定义的枚举类文件,最多只能定义一个public访问权限的枚举类,且该java源文件也必须和该枚举类的类名相同。 

    枚举类与普通类的区别

    枚举类可以实现一个或多个接口,使用enum定义的枚举类型默认继承了java.lang.Enum类,而不是继承Object类。
    使用enum定义、非抽象的枚举类默认会使用final修饰,因此枚举类不能派生子类。
    枚举类的构造器只能用private访问控制符,如果省略了构造器的访问控制符,则默认使用private修饰;如果强制指定访问控制符,则只能指定private修饰符。
    枚举类的所有实例必须在枚举类的第一行显示列出,否则这个枚举类永远都不能产生实例。列出这些实例时,系统会自动添加
    public static final修饰,无须程序员显式添加。
    所有的枚举类都提供了一个values方法,该方法可以很方便地遍历所有的枚举值。

    枚举其他知识点

    枚举类也是一种类,只是它是一种比较特殊的类,因此它一样可以定义Field、方法。 
    枚举类也可以实现一个或多个接口。与普通类实现一个或多个接口完全一样,枚举类实现一个或多个接口时,也需要实现该接口所包含的方法。 
    枚举类里定义抽象方法时不能使用abstract关键字将枚举类定义成抽象类(系统会自动会为它添加abstract关键字),但因为枚举类型需要显示创建枚举值,而不是作为父类,所以定义每个枚举值时必须为抽象方法提供实现,否则将出现编译错误。 

    枚举类在switch的用法

           代码:

    public class WeekSwitchTest {
    public static void main(String[] args) {
    Week week = Week.valueOf(Week.class, "THURSDAY");
    switch (week) {
    case MONDAY:
    System.out.println("星期一");
    break;
    case TUESDAY:
    System.out.println("星期二");
    break;
    case WEDNESDAY:
    System.out.println("星期三");
    break;
    case THURSDAY:
    System.out.println("星期四");
    break;
    case FRIDAY:
    System.out.println("星期五");
    break;
    case SATURDAY:
    System.out.println("星期六");
    break;
    case SUNDAY:
    System.out.println("星期
    ");
    break;
    }
    }


    }

  • 相关阅读:
    Android Studio快速查看apk的MD5、SHA1、SHA256
    aapt remove 命令报 error during crunch archive is toast
    如何快速将MySQL数据库转换为PostgreSQL数据库
    Exception in thread “main“ org.apache.xmlbeans.impl.values.XmlValueDisconnectedException
    idea2021奇葩问题:找不到程序包和符号
    Unable to find method ‘org.gradle.api.tasks.TaskInputs.property
    laravel response返回值精度问题
    中缀、前缀、后缀表达式的运算
    选择排序
    中缀表达式转后缀表达式
  • 原文地址:https://www.cnblogs.com/t0404/p/10291079.html
Copyright © 2011-2022 走看看