Java面向对象--枚举

  1. 枚举简介
    实际开发的过程之中,我们经常会遇到一些数据的取值就在几个确定的值之间。例如,性别只有男或者女,一周只有七天。自从Java 5之后就开始增加了对枚举类型的支持。
    枚举也是一种类,一种特殊的类,所以枚举也称为枚举类,是一种引用类型。它的声明和使用与类的接口相似,但是枚举类型的声明必须要使用关键字enum

  2. 枚举类型的定义
    枚举定义的语法格式:

    [修饰符] enum 枚举类型名{
    	枚举成员
    	方法
    }
    

    枚举的修饰符可以是:publicprivateinternal
    枚举类型名:一是作为枚举名使用。二是表示枚举成员的数据类型。因此,枚举成员也称为枚举实例或者枚举对象。
    枚举成员是可以一一列出来的枚举常量,所以枚举成员也被称为枚举常量或者枚举值。

    枚举类与其他类的区别:

    • 枚举可以实现一个或者多个接口,使用enum关键字声明的枚举继承的是java.lang.Enum类,而不是继承java.lang.Object类,因此枚举不能够显示继承其他的父类。
    • 使用enum定义非抽象的枚举类型的时候默认使用final修饰,因此枚举类不能派生子类。
    • 创建枚举类型的对象的时候不能够使用new运算符,而是直接将枚举成员赋值给枚举对象。
    • 因为枚举是类,所以说他可以拥有属于自己的构造方法和其他方法,但是构造方法只能够使用private访问修饰符,如果省略,则默认使用private修饰符,如果强制使用访问修饰符,则只能够使用private
    • 枚举的所有枚举成员必须在枚举体的第一行显示列出,否则该枚举不能够产生枚举成员,枚举成员默认使用public static final进行修饰。

    例如:

    public enum direction{
    	EAST, SOUTH, WEST, NORTH;
    }
    

    定义完枚举类之后,便可以通过枚举类型名直接引用其枚举成员,如:direction.EAST;。因为枚举成员都是常量,所以默认全大写。最后一个枚举常量后面的分号可以省略,但是如果定义了方法,则该分号不可以省略。
    枚举类型预定义的方法:

    方法 功能说明
    public static enumtype[] values() 返回枚举类型的数组,该数组包含所有枚举成员,并按声明顺序存储
    public static enumtype valueOf(String str) 返回名称为str的枚举成员

    枚举常用方法:

    常用方法 功能
    public final int compareTo(E o) 返回当前枚举成员与参数枚举成员o在定义时顺序的比较结果
    public final String name() 返回枚举常量的名称
    public final int ordinal() 返回枚举成员在枚举中的序号(从0开始)
    public final boolean equals(Object other) 比较两个枚举引用的对象是否相等
    public String toString() 返回枚举成员的名称
    public static \<T extends Enum \<T>> T valueOf(Class\<T> enumType, String name) 返回指定枚举类型和指定名称的枚举成员
  3. 不包含方法的枚举
    访问枚举类型的成员的时候,直接使用枚举名调用枚举成员即可,即“枚举名.枚举成员”,如果不像是用这种形式去的枚举类的对象的时候,也可以使用Enum类定义的valueOf()方法,即枚举名.valueOf()的形式来进行调用获取枚举类的对象。

    enum direction{
    EAST, SOUTH, WEST, NORTH
    }
    
    public class demo{
        public static void main(String[] args) {
            direction dir = direction.EAST;
            System.out.println(dir);
    
            direction dir1 = direction.valueOf("EAST");
            System.out.println(dir1);
    
            for(direction each : direction.values()){
                System.out.println(each);
            }
        }
    }
    
  4. 包含属性和方法的枚举
    枚举也是拥有构造方法,其方法只是在构造枚举实例值的时候被调用。每个枚举的实例值就是枚举的一个对象。因此创建每个枚举实例的时候都需要调用该构造方法。

    enum direction{
        EAST("东"), SOUTH("南"), WEST("西"), NORTH("北");//带有属性的枚举成员
        private String name;
        private direction(String name){
            this.name = name;
        }
        public String toString(){//覆盖原来的toString()方法,返回name熟悉之。
            return name;
        }
    }
    
    public class demo{
        public static void main(String[] args) {
            direction dir2 = direction.EAST;
            System.out.println(dir2);//输出东
            
            direction dir = Enum.valueOf(direction.class, "EAST");
            System.out.println(dir);//输出东
    
            for(direction each: direction.values()){
                System.out.println(each.toString());
            }
        }
    }
    
发布了36 篇原创文章 · 获赞 47 · 访问量 3978

猜你喜欢

转载自blog.csdn.net/qq_43800455/article/details/103556467
今日推荐