您的位置:首页 > 编程语言 > Java开发

Java学习之枚举

2016-02-24 22:33 405 查看
    枚举是字段由一组不变的常量构成的一种类型。常量的值一 一列出来,只限于列举出来的值的范围内。

    例1:public enum Gender {

                 MALE,FEMALE;

           }

    可以用JDK自带的反编译工具javap查看Gender内部的实现: javap -c -l -private Gender (-c 反编译class文件,-l输出行号,-private显示所有成员)。

    得到结果如下:

    public final class Gender extends java.lang.Enum{

        public static final Gender MALE;

        public static final Gender FEMALE;

        private Gender();

        public static Gender[] values();

        public static Gender valueOf(java.lang.String);

        static {};

      }

    由此可得出枚举的特点:

    1,枚举本质是一个类,可以定义构造方法,成员变量,普通方法和抽象方法。

    2,枚举继承自java.lang.Enum类,但不能显式继承。

    3,默认构造方法访问权限是private。

    4,枚举值本质上是全局常量值,不能用new关键字声明。

    5,枚举是单例的,为了保证枚举是单例的那么构造函数全部要私有

    例2:在枚举中定义属性。

    public enum TrafficLight {

      // 定义枚举值

       RED,GREEN,YELLOW;

       // 定义成员属性

       public String info = "交通灯信息";

       public static void main(String[] args) {

           System.out.println(TrafficLight.GREEN.info);

       }

    }

    例3:在枚举中定义构造函数。

    public enum TrafficLight {

       // 定义枚举值

       RED("红灯"),GREEN("绿灯"),YELLOW("黄灯");

       // 定义成员属性

       public String info = "交通灯信息";

       // 提供构造函数进行属性的初始化

       private TrafficLight(String info){

       this.info = info;

       }

       public static void main(String[] args) {

           System.out.println(TrafficLight.GREEN.info);

           System.out.println(TrafficLight.RED.info);

           System.out.println(TrafficLight.YELLOW.info);

       }

    }

在枚举类中可以定义抽象方法,但是不能将枚举类声明为抽象类,只能在声明枚举值的时候实现所有的抽象方法即(匿名内部类)。

   
    例4:在枚举中定义函数。

    public enum TrafficLight {

    // 定义枚举值

        RED("红灯") {

          @Override

           public void showMessage() {

               System.out.println("红灯停!");

          }

        },

       GREEN("绿灯"
4000
) {

          @Override

           public void showMessage() {

              System.out.println("绿灯行!");

           }

       },

        YELLOW("黄灯") {

            @Override

            public void showMessage() {

                System.out.println("你自己看着办!");

            }

         };

            // 定义成员属性

        public String info = "交通灯信息";

          // 提供构造函数进行属性的初始化

       private TrafficLight(String info) {

          this.info = info;

       }

          // 提供一个表明灯的信息的方法

        public abstract void showMessage();

        public static void main(String[] args) {

           System.out.println(TrafficLight.GREEN.info);

           System.out.println(TrafficLight.RED.info);

           System.out.println(TrafficLight.YELLOW.info);

           TrafficLight.RED.showMessage();

         }

   }

        由例5可知: 在枚举类中可以定义抽象方法,但是不能将枚举类声明为抽象类,只能在声明枚举值的时候实现所有的抽象方法即(匿名内部类)。

 枚举类型静态方法:

   values():返回枚举类所有对象组成的数组。

   valueOf(String name):返回实例名为name的枚举对象。

     Enum类方法:
         name():返回枚举实例名。

         ordinal():返回实例在枚举中的索引,从0开始。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: