java基础之枚举类-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

java基础之枚举类

简介: 当需要一组常量时,建议使用枚举类。即类的对象是有限个的、确定的

概念

当需要一组常量时,建议使用枚举类。即类的对象是有限个的、确定的

比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。

  • 若枚举只有一个对象,则可以作为一种单例模式的实现方式

定义

1. 自定义枚举类

jdk5.0之前,需要自定义枚举类

枚举类中已经定义好了一组静态对象,直接使用类调用即可

public class test {

   public static void main(String[] args) {

       Season autumn = Season.AUTUMN;

       System.out.println(autumn.getSeasonName());//秋天

        

   }

}

//自定义枚举类

class Season{

   //1.声明Season对象的属性:private final 修饰

   private final String seasonName;

   private final String seasonDesc;

   //2.私有化类的构造器(防止外界调用,产生不确定个数的对象),并给对象属性赋值

   private Season(String seasonName, String seasonDesc) {

       this.seasonName = seasonName;

       this.seasonDesc = seasonDesc;

   }

   //3.提供当前枚举类的一组对象:public static final修饰(需要不可变,直接用类调用)

   public static final Season SPRING=new Season("春天", "春暖花开");

   public static final Season SUMMER=new Season("夏天", "夏暖花开");

   public static final Season AUTUMN=new Season("秋天", "秋暖花开");

   public static final Season WINTER=new Season("冬天", "冬暖花开");

   //4.获取枚举类对象的属性

   public String getSeasonName() {

       return seasonName;

   }

   public String getSeasonDesc() {

       return seasonDesc;

   }

   //5.提供toString方法

   @Override

   public String toString() {

       return "Season{" +

               "seasonName='" + seasonName + '\'' +

               ", seasonDesc='" + seasonDesc + '\'' +

               '}';

   }

}

2. enum定义枚举类

jdk5.0之后,可以使用enum关键字定义枚举类

public class test {

   public static void main(String[] args) {

       Season spring = Season.SPRING;

       System.out.println(spring);//SPRING

       System.out.println(Season.class.getSuperclass());//class java.lang.Enum

       //可以看出,enum默认继承java.lang.Enum类,它重写了toString方法,直接输出对象名

   }

}

enum Season{

   //1.提供当前枚举类的对象,对象之间用','分隔,末尾对象用';'结束

   //若无属性,括号也可省略

   SPRING("春天", "春暖花开"),

   SUMMER("夏天", "夏暖花开"),

   AUTUMN("秋天", "秋暖花开"),

   WINTER("冬天", "冬暖花开");

   //2.声明Season对象的属性:private final 修饰

   private final String seasonName;

   private final String seasonDesc;

   //3.私有化类的构造器(防止外界调用,产生不确定个数的对象),并给对象属性赋值

   private Season(String seasonName, String seasonDesc) {

       this.seasonName = seasonName;

       this.seasonDesc = seasonDesc;

   }

   //4.获取枚举类对象的属性

   public String getSeasonName() {

       return seasonName;

   }

   public String getSeasonDesc() {

       return seasonDesc;

   }

}

enum类的主要方法

values():返回枚举类中的对象数组

valueOf(String str):将一个字符串转为对应的枚举类对象(字符串必须是枚举类对象)

toString():返回当前 枚举类 对象常量 的名称

使用enum定义的枚举类实现接口

  1. 实现接口,在enum类中实现抽象方法
    这样子,每个枚举类对象调用此方法,执行的一样
  2. 让枚举类的对象分别实现接口中的抽象方法
    这样子,每个枚举类对象调用方法,执行的不同

interface inter{

   void show();

}

enum Season implements inter{

    

   //1.提供当前枚举类的对象,对象之间用','分隔,末尾对象用';'结束

   SPRING("春天", "春暖花开"){

       @Override

       public void show() {

       }

   },

   SUMMER("夏天", "夏暖花开"){

       @Override

       public void show() {

       }

   },

   AUTUMN("秋天", "秋暖花开"){

       @Override

       public void show() {

       }

   },

   WINTER("冬天", "冬暖花开"){

       @Override

       public void show() {

       }

   };

   //2.声明Season对象的属性:private final 修饰

   private final String seasonName;

   private final String seasonDesc;

   //3.私有化类的构造器(防止外界调用,产生不确定个数的对象),并给对象属性赋值

   private Season(String seasonName, String seasonDesc) {

       this.seasonName = seasonName;

       this.seasonDesc = seasonDesc;

   }

   //4.获取枚举类对象的属性

   public String getSeasonName() {

       return seasonName;

   }

   public String getSeasonDesc() {

       return seasonDesc;

   }

}


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: