枚举
枚举类型是一种整型,它的作用一是让数据看起来更直观,二是将数据圈定一个范围。不支持继承。
- 数据看起来更直观,即将该类型含有的数据用变量的形式呈现出来。
- 将数据圈定一个范围,即将该类型所有包含的数据一一列举出来。
例如:在打开一个文具盒之前,里面可能含有什么东西无法知道,通过定义枚举的办法,将里面可能含有的铅笔和钢笔表示出来,即枚举的作用所在。
代码如下
/* 这里定义了枚举类型的 box,规定 box 里面只含有 PENCIL 和 PEN 两个元素 */
public enum Box{PENCIL, PEN};
注意
枚举变量中的枚举元素系统是按照常量来处理的,故叫枚举常量,他们是不能进行普通的算术赋值的,PENCIL=1; 这样的写法是错误的。但是枚举值是默认从0开始的每次递增1的有序数值。
enum Box{PENCIL = 1, PEN = 2}; // 在Java中会产生报错
枚举类型的本质
尽管enum 看起来像是一种新的数据类型,事实上,enum是一种受限制的类,并且具有自己的方法。
在enum中,提供了一些基本方法:
values():返回enum实例的数组,而且该数组中的元素严格保持在enum中声明时的顺序。
name():返回实例名。
ordinal():返回实例声明时的次序,从0开始。
getDeclaringClass():返回实例所属的enum类型。
equals():判断是否为同一个对象。
可以使用 == 来比较enum实例。
此外,java.lang.Enum实现了Comparable和 Serializable 接口,所以也提供 compareTo() 方法。
示例代码如下
public class TestEnum{
enum Box{PENCIL, PEN};
public static void main(String[] args) {
System.out.println("打印所有的笔");
Box pencil = Box.PENCIL;
Box pencil1 = Box.PENCIL;
Box pencil2 = Box.PENCIL;
Box pen = Box.PEN;
System.out.println("pencil的实例名是:" + pencil.name());
System.out.println("pen的实例名是:" + pen.name());
System.out.println("pencil 和 pen 是否为同一个对象:" + pencil.equals(pen));
System.out.println("pencil1 和 pencil2 是否为同一个对象:" + pencil1.equals(pencil2));
for(Box b : Box.values()){
System.out.println(b + "的默认值:" +b.ordinal());
}
}
}
结果输出如下
打印所有的笔
pencil的实例名是:PENCIL
pen的实例名是:PEN
pencil 和 pen 是否为同一个对象:false
pencil1 和 pencil2 是否为同一个对象:true
PENCIL的默认值:0
PEN的默认值:1
前面提到在Java中直接赋值会产生报错,那么应该如何显示的为其赋值?可参考以下文章。
java定义枚举并赋值_java中枚举的特性是什么?如何赋值?