-
枚举简介
实际开发的过程之中,我们经常会遇到一些数据的取值就在几个确定的值之间。例如,性别只有男或者女,一周只有七天。自从Java 5之后就开始增加了对枚举类型的支持。
枚举也是一种类,一种特殊的类,所以枚举也称为枚举类,是一种引用类型。它的声明和使用与类的接口相似,但是枚举类型的声明必须要使用关键字enum
。 -
枚举类型的定义
枚举定义的语法格式:[修饰符] enum 枚举类型名{ 枚举成员 方法 }
枚举的修饰符可以是:
public
,private
,internal
。
枚举类型名:一是作为枚举名使用。二是表示枚举成员的数据类型。因此,枚举成员也称为枚举实例或者枚举对象。
枚举成员是可以一一列出来的枚举常量,所以枚举成员也被称为枚举常量或者枚举值。枚举类与其他类的区别:
- 枚举可以实现一个或者多个接口,使用
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)
返回指定枚举类型和指定名称的枚举成员 - 枚举可以实现一个或者多个接口,使用
-
不包含方法的枚举
访问枚举类型的成员的时候,直接使用枚举名调用枚举成员即可,即“枚举名.枚举成员”,如果不像是用这种形式去的枚举类的对象的时候,也可以使用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); } } }
-
包含属性和方法的枚举
枚举也是拥有构造方法,其方法只是在构造枚举实例值的时候被调用。每个枚举的实例值就是枚举的一个对象。因此创建每个枚举实例的时候都需要调用该构造方法。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()); } } }
Java面向对象--枚举
猜你喜欢
转载自blog.csdn.net/qq_43800455/article/details/103556467
今日推荐
周排行