枚举类型(enum)介绍

枚举类型

 1、概述,JDK1.5增加了枚举类型,可以使用enum来定义eg:

           public enum Gender{
              MALE,FEMALE;
           }
  其中每一个枚举元素都是该枚举类型的一个实例,使用和遍历
           Gender gender = Gender.MALE;    //使用    
           for(Gender s : Gender.values()) {//遍历
                 System.out.println(s);  
           }
 2、Enum类和enum关键字的区别
           1.使用enum关键字定义的枚举类型,实际上就相当于定义了一个类,此类继承了java.lang.Enum类
           2.每一个枚举值都是一个枚举类型的实例,它们被预设为public static final
        Enum类只有一个受保护的构造方法
              protectd Enum(String name,int ordinal)
              ordinal: 枚举元素的编号
           实际上对于每一个枚举元素一旦声明之后,就表示自动调用此构造方法,所有的编号采用自动编号的方式进行(编号从 0开始);
           使用valueOf()方法,通过枚举类可以找到枚举中一个指定的对象
           public enum Color{
              RED,BLUE;
           }
3、获得枚举类型对象的两种方式:
           第一种方式:
       String s = "RED";
           Color red = Color.valueOf(s);
           第二种方式:
       Color red = Color.RED;
           第一种方式是通过一个字符串的值来获得 对象的,只要我们改变字符串的值就随意改变要获得的对象.
           第二种方式就是写死的代码,不管怎么执行都是拿到枚举类中 RED对象,永远都是这样。
4、枚举类型的属性和方法
           枚举类型可以有属性和方法
           规则如下:
           属性和方法必须定义在元素列表声明之后        
public enum Color{
              RED,BLUE;
              private String name;
              public String getName(){
              return this.name;
              }
           }
5、枚举类型中定义构造方法
            1.枚举的构造方法只能定义在元素列表之后
            2.枚举类型的构造方法只能是 private的,不写默认也是private
            3.元素如果需要调用有参构造方法,则在元素后面加上"(参数)"
    解释:Color类型只有三个固定对象,分别为RED GREEN BLUE,并且这个三个对象在创建的时候分别调用了有参的和无参的构造器
              eg: 
      public enum Color {
             RED("红色"),GREEN("绿色"),BLUE;
             private String name;
             public String getName(){
                return this.name;
                 }
             //一个参数构造器
             Color(String name){
                this.name = name;
             }
             //无参构造器
             private Color(){
             }
              }
 main:
             //拿到Color中的三个固定对象的其中一个
             Color c = Color.RED;
             //拿到RED对象中的name属性的值
             //这个值打印出来会是 "红色"
             //因为是RED这个对象才创建的时候
             //通过一个参数的构造器传给属性name的
             //在枚举类型中声明元素列表其实就是
             //在创建这个枚举类型的固定对象
             String name = c.getName();
       枚举隐式继承于Enum因此,无法再继承其他类
6、枚举实现接口
           枚举可以实现接口,有以下两种方式
          1.与普通class类一样,在枚举类中实现接口一样
          2.枚举中单独实现接口中的抽象方法或者各个枚举元素对象中分别实现这个接口中的抽象方法 
        public interface Sofa{
            void sit();
          }          
        第一种方式来实现接口          
    public enum Color implements Sofa{
             RED("红色"),GREEN("绿色"),BLUE;
             private String name;
             public String getName(){
                return this.name;
                 }
             //一个参数构造器
             Color(String name){
                this.name = name;
             }
             //无参构造器
             private Color(){
             }
             //枚举中单独实现,每一个枚举元素对象都可以调用到这个方法
             public void sit(){
                //....
             }
        }
         第二种方式来实现接口
           
  public enum Color implements Sofa{
             //每一个枚举元素对象中单独实现这个接口中的抽象方法 将来每个枚举元素对象调用到的就是自己独立实现的这个sit方法
             RED("红色"){
                public void sit(){
                    //....
                    }
             },
             GREEN("绿色"){
                public void sit(){
                    //....
                    }
             },            
             BLUE{
                public void sit(){
                    //....
                    }
             };
             private String name;
             public String getName(){
                return this.name;
                 }
             //一个参数构造器
             Color(String name){
                this.name = name;
             }
             //无参构造器
             private Color(){
             }
              }
7、枚举中定义抽象方法
          在一个枚举中可以定义多个抽象方法,但枚举中的每个元素必须分别实现这些抽象方法,如下代码:         
public enum Color {
             RED{
            public String getInfo() {//RED中实现抽象方法
               return "红色";
            }
             },
             GREEN{
            public String getInfo() {//GREEN中实现抽象方法
               return "绿色";
            }
             },
             BLUE{
            public String getInfo() {//BLUE中实现抽象方法
               return "蓝色";
            }
             };
             public abstract String getInfo();//定义抽象方法
          }

以上就是枚举的介绍

你可能感兴趣的:(Java,Java技术栈)