目录
枚举简介
枚举类型取代了以往常量定义的方式,将常量封装在类或接口中,枚举类型本质上还是以类的形式存在(可以变量和方法)。
[enum][1]是定义枚举类型关键字。
public enum Size
{
SMALL, MEDIUM, LARGE;// 定义枚举类型成员时必须为第一条语句
Size(){System.out.println(构造方法);};
public static void main(String[] args){} //主方法
}
从上文很容易看出在定义枚举类型成员变量时会自动调用构造函数,如无构造函数则会调用默认构造函数。
在程序运行时上文相当于执行了如下的代码:
public static final size SMALL=new size();
public static final size MEDIUM=new size();
public static final size LARGE=new size();
//因此调用了三次构造函数输出三次
枚举类型可以看作是普通的类(除了不能继承),当定义一个枚举类型时,每一个枚举类型成员都可以看作是枚举类型的一个实例。在虚拟机中加载枚举类型时,会预先创建多给枚举类型对象。
语法
定义枚举类型元素时必须为第一条语句
这些枚举类型元素都默认被public、static、final修饰,所以当使用枚举类型成员时直接使用枚举类型名称调用枚举类型成员即可。
Size.SMALL;
对于枚举类型的元素,其命名方式与常量相同,即全部使用大写字母。
构造方法由其内部调用且定义的构造方法都为private修饰符所修饰,因此不允许外部使用new来构造枚举类型对象。
枚举类型也要求其枚举元素各不相同。
枚举类型的一种方便用法是它可以用在switch语句中
public String getsize(Size size){ //参数为枚举类型
switch (size){
case SMALL://在case子句中,可以直接使用枚举元素而不需要使用枚举类型来引用该元素。
return "小号";
case MEDIUM:
return "中号";
case LARGE:
return "大号";
default:
return null;
// 如果在case子句中调用return,则编译器要求switch语句必须有default子句。
}
}
通常情况下,switch语句只能用于整数值,但由于枚举元素在定义时编译器会自动为其生成整数序号(其中初始常量序数为零,依次排序),这些序号可以通过 ordinal() 方法查看。
导入导出Markdown文件
- 丰富的快捷键
常用方法
- compareTo(E o)
比较此枚举与指定对象的顺序。在调用对象小于、等于或大于参数时,分别返回负整数、零或正整数。 枚举常量只能与相同枚举类型的其他枚举常量进行比较。该方法实现的自然顺序就是声明常量的顺序。
参数:o - 要比较的对象。
//由上文可知SMALL, MEDIUM, LARGE,的序数分别为0,1,2
Size.SMALL.compareTo(MEDIUM);//SMALL的序数小于参数MEDIUM应该返回-1
Size.MEDIUM.compareTo(MEDIUM);//相等,应该返回零
Size.LARGE.compareTo(MEDIUM);//LARGE的序数大于参数MEDIUM应该返回1
- ordinal()
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
Size.SMALL.ordinal();//返回序数为零
- getDeclaringClass()
返回与此枚举常量的枚举类型相对应的 Class 对象。
LARGE.getDeclaringClass();//返回 Size
- values()
该方法可以将枚举类型元素以数组的形式返回
for(int i=0;i<Size.values().length;i++){
System.out.println("枚举类型变量"+Size.values()[i]);
}
输出结果如下:
枚举类型变量SMALL
枚举类型变量MEDIUM
枚举类型变量LARGE
作者简介
作者笔名:一尘埃,计算机专业2015级,就读于沈阳,qq:1169885255。
作者学习计算机年龄较短,有不少学习错误,十分欢迎各位计算机大神留言指导。