枚举

枚举

一.              枚举的作用原理。

问题:要定义星期几或性别,季节,月份的变量,该怎么定义?
假设用1-7分别表示星期一到星期日,但有人可能会写成 int weekday = 0;
有的用0~6表示,当一个项目有很多人同时在开发时,为了统一,于是枚举就用上了

1. 枚举就是让某个类型变量的取值只能为若干个固定值中的一个。否则编译器就会报错。枚举可以让编译器在编译时就可以控制源程序填写的非法值。普通变量在开发阶段无法实现这一目标。

二.              _用普通类模拟枚举的实现原理

 

1.枚举中构造方法必须是私有的。

2. 每个元素分别用公有的静态成员变量表示。

3.枚举可以有 public 和abstract 方法。

 

 定义一个新的类型,让这个类型定义的变量指定的值是固定的值,怎么做:

 

三.              java的枚举的基本应用

举例:定义一个Season的枚举

扩展:枚举类的values,valueOf.,name,toString.ordinal等方法。

枚举是一种特殊的类。其中的每一个元素都是该类的一个实例对象。

示例如下:

 

publicclass EnumTest {

 

   /**

    * @param args

    */

   publicstaticvoid main(String[] args) {

     // TODO Auto-generated method stub

     

     Season season = Season.Spring;

     System.out.println(season);

     System.out.println(season.name());

     System.out.println(season.ordinal());

     System.out.println(season.valueOf("Summer".toString()));

     System.out.println(season.values().length);

    

    

   }

     publicenum Season{

      

       Spring,Summer,Autumn,Winter;

      

     }

 

}

输出结果为:

Spring

Spring

0

Summer

 

 

四.              实现带有构造方法的枚举

 

1.枚举里的元素如:Spring,Summer,Autumn,Winter;;他们必须定义在枚举类的最开始部分,且枚举元素列表的后面要有分号结束


2.枚举元素和SpringSpring ()的效果一样,都是调用默认的构造方法。



publicclass EnumTest {

 

   /**

    * @param args

    */

   publicstaticvoid main(String[] args) {

     // TODO Auto-generated method stub

     

     Season season = Season.Spring;

     System.out.println(season);

     System.out.println(season.name());

     System.out.println(season.ordinal());

     System.out.println(season.valueOf("Summer".toString()));

     System.out.println(season.values().length);

    

    

   }

     publicenum Season{

      

       Spring(1),Summer(),Autumn,Winter;

       private Season(){System.out.println("first");}

       private  Season(int season){System.out.println("second");

}

      

}

 

输出结果为:

second

first

first

first

Spring

Spring

0

Summer

4

 

五.              _实现带有抽象方法的枚举

 

1、定义枚举TrafficLamp
2、实现普通的next方法
3、实现抽象的next方法:
    每个元素分别是由枚举类的子类来生产的实例对象,
    这些子类采用类似内部类的方式进行定义。
4、增加上表示时间的构造方法

如果枚举元素后面没有大括号对,那是不会生产内部类的。
先看有内部类的效果,再看没有内部类的效果,eclipse自动删除原来的内部类。
枚举只有一个成员时,就可以作为一种单例的实现方式。

实例

publicclass EnumTest11 {

 

   /**

    * @param args

    */

   publicstaticvoid main(String[] args) {

    

   }

  

   publicenum TrafficLamp{

  

     RED(30){

        public TrafficLamp nextLamp(){

          returnGREEN;

         

        }

       

     },

     GREEN(45){

        public TrafficLamp nextLamp(){

          returnYELLOW;

         

        }

       

     },

    

     YELLOW(5){

        public TrafficLamp nextLamp(){

          returnRED;

         

        }

       

     };

    

   public  abstract TrafficLamp nextLamp();

     privateinttime;

     private TrafficLamp (int time){this.time=time;}

    

   }

}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值