JAVA笔记:枚举类

定义:

    [修饰符] enum 类名

   {

    }

   枚举类首先是一个类,所以大部分功能与一般类相同,下面几个不同点

    a.枚举类的所有实例必须在枚举类的第一行显示列出,否则这个枚举类永远都不能产生实例。

           列出这些实例时,系统会自动添加public static final修饰,无须程序员显式添加。

           也就是在加载类时枚举类对象已经创建,并且不能改变。

           因为是静态变量,所以可以通过类名.变量名方式访问。

     b.枚举类构造方法只能够使用private访问控制符,如果省略了则默认使用private修饰

     c.如果定义非抽象的枚举类,则默认使用final修饰,因此非抽象的枚举类不能够派生子类。

     d.枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承java.lang.Enum类,而不是继承Object类。

     e.枚举类可以有自己的属性、方法、构造方法等。

     f.所有枚举类都提供一个values方法来遍历所有枚举值

     public enum SeasonEnum

    {

          SPRING,SUMMER,FALL,WINTER;

    }

     for (SeasonEnum s:SeasonEnum.values())

    {

             System.out.println(s);

    }

 

1、枚举类中定义成员变量

       public enum Gender

       {

            MALE,FEMALE;

             public String name;

         }

        public class GenderTest

        {

             public static void main(String[] args)

               {

                 //通过Enum的valueOf方法来获取指定枚举类的枚举值

                 Gender g = Enum.valueOf(Gender.class, "FEMALE");

                  g.name = "女"; System.out.println(g+ "," + g.name);

                 }

        }

2、枚举类中定义成员方法

     public enum Gender

     {

         MALE,FEMALE;

         private String name;

         public void setName(String name)

         {

             switch(this)

              {

                  case MALE:

                        if(name.equals("男"))

                        {

                           this.name = name;

                         }else

                        {

                             System.out.println("参数错误");

                              return;

                        }

                        break;

                 case FEMALE:

                       if(name.equals("女"))

                       {

                           this.name = name;

                       }

                      else

                      {

                            System.out.println("参数错误");

                            return;

                        }

                       break;

                      }

                }

          public String getName()

         {

             return this.name;

           }

}

3、枚举类中定义构造方法

     public enum Gender

     {

           MALE("男"),FEMALE("女");

           privatefinal String name;

           private Gender(String name)

           {

                this.name = name;

             }

            public String getName()

            {

              returnthis.name;

            }

        }

4、实现接口 

public interface GenderDesc

{

  void info();

}

public enum Gender implements GenderDesc

{

   MALE("男"),FEMALE("女");

   private final String name;

   private Gender(String name)

   {

     this.name = name;

   }

   public String getName()

  {

   return this.name;

  }

   @Override

   public void info()

  {

   // TODO Auto-generated method stub

   System.out.println("枚举类实现接口");

  }

}

这种实现方式,导致每个枚举值调用方法时都有相同的功能,为了实现不同的功能如下:

public enum Gender implements GenderDesc

{

   MALE("男")

  {

    @Override

     public void info()

     {

         // TODO Auto-generated method stub

        System.out.println("枚举类实现接口男");

     }

  }

,FEMALE("女")

  {

   @Override

     public void info()

     {

         // TODO Auto-generated method stub

        System.out.println("枚举类实现接口女");

     }

 

  };

   private final String name;

   private Gender(String name)

   {

     this.name = name;

   }

   public String getName()

  {

   return this.name;

  }

}

这种实现方式匿名内部类继承枚举类来实现的,枚举类包含了抽象方法,那么它一定是抽象类,系统会默认使用abstract来修饰类

5、使用抽象方法

public enum Gender

{

   MALE("男")

  {

    @Override

     public void info()

     {

         // TODO Auto-generated method stub

        System.out.println("枚举类实现接口男");

     }

  }

,FEMALE("女")

  {

   @Override

     public void info()

     {

         // TODO Auto-generated method stub

        System.out.println("枚举类实现接口女");

     } 

  };

  public abstract void info();

   private final String name;

   private Gender(String name)

   {

     this.name = name;

   }

   public String getName()

  {

   return this.name;

  }

}

案例参考《JAVA疯狂讲义》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值