文章目录
- 前言
- 一、枚举是什么?
- 二、枚举的使用
- 1.使用枚举设置常量
- 2.操作枚举类型成员的方法
- 3.枚举类型中设置构造方法(给枚举常量赋值)
- 4.枚举常量中设置方法
- 总结
前言
枚举类型可以将常量封装在类或接口中,提供了安全检查的功能。枚举类型本质上还是以类的形式存在。本篇文章将讲述枚举的初步使用。
一、枚举是什么?
枚举是一种数据类型,用于定义一组具体名的常量。枚举常量表示可以取的固定值,通常用于表示一组相关的可能选项。
设置常量时,我们通常会将常量放置在接口中,以便于在程序中直接使用。被final和static关键字修饰后,该常量不能被修改,如下:
public interface Constants{
public static final int Contants_A=10;
public static final int Contants_B=20;
//Constants-A和Constants-B两个常量不可改变,可直接调用
}
但有了枚举类型后,便可以取代这种定义方式。使用枚举类型定义常量的语法如下:
public enum Constants{
Constants_A,
Constants_B,
Constants_C;
}
enum 是定义枚举类型的关键字,当需要在程序中使用Constants枚举中的常量时,可以使用Constants.Constants_A这样的例子来表示。
二、枚举的使用
1.使用枚举设置常量
上文已经介绍了如何定义枚举类型,如下为实操展示:
public class ConstantsTest{
public enum Constants{ //在enum类型中定义常量
Constants_A,
Constants_B,
Constants_C
}
}
注意:枚举类中的常量名不能相同,否则会报错。
2.操作枚举类型成员的方法
枚举类自身继承于java,lang.Enum类。当定义一个枚举类型,每个枚举类型成员都可以看作没觉类型的一个实例,这些枚举类型成员都默认被final、public、static修饰,所以当使用枚举类型成员时直接使用枚举类型的名称调用枚举类型成员即可。
以下是针对枚举常量使用的常用方法:
方法 | 功能描述 | 举例 |
values() | 该方法可以将枚举类型的枚举常量以数组的形式返回 | 枚举类型名称.values() |
valueOf() | 该方法可以将普通字符串转换为枚举实例 | 枚举类型名称.valueOf("abc") |
compareTo() | 该方法用于比较两个枚举对象在定义时的顺序 | 枚举常量对象.compareTo(枚举常量对象) |
ordinal() | 该方法用于得到枚举成员的位置索引 | 枚举常量对象.ordinal() |
实操展示:
values()方法:
public class Menu {
public enum Constants{
Constants_A, //索引位置为0
Constants_B, //索引位置为1
Constants_C; //索引位置为2
}
public static void main(String[] args) {
for(int i=0;i<Constants.values().length;i++){ //调用了枚举类的value()
System.out.println(Constants.values()[i]);
}
}
}
运行结果:
Constants.values()[i]为 以i为索引的Constants枚举常量
valueOf()和compareTo()方法:
public class Menu {
public enum Constants{
Constants_A,
Constants_B,
Constants_C,
Constants_D;
}
public static void compare(Constants c){
//该方法调用了compareTo()进行对比并进行解释
for(int i =0;i<Constants.values().length;i++){
Constants.values()[i].compareTo(c);
System.out.println("Constants_C字符串和"+Constants.values()[i]+"是否相等:"+Constants.values()[i].compareTo(c));
if(Constants.values()[i].compareTo(c)!=0){
System.out.println("Constants_C(字符串)枚举常量和"+Constants.values()[i]+"枚举常量不相等");
System.out.println("------------------------------");
}else if (Constants.values()[i].compareTo(c)==0) {
System.out.println("Constants_C(字符串)枚举常量和"+Constants.values()[i]+"枚举常量相等");
System.out.println("------------------------------");
}
}
}
public static void main(String[] args) {
compare(Constants.valueOf("Constants_C"));
}
}
运行结果:
调用compareTo()方法返回的结果为int值,正值代表方法中的常量在调用该方法的枚举对象位置之前;0代表两个相互比较的枚举成员的位置相同;负值代表方法中参数在调用该方法的枚举对象位置之后。
ordinal()方法:
public class Menu {
public enum Constants{
Constants_A,
Constants_B,
Constants_C,
Constants_D;
}
public static void main(String[] args) {
for(int i=0;i<Constants.values().length;i++){
System.out.println(Constants.values()[i]+"常量在枚举类索引位置为:"+Constants.values()[i].ordinal()); //调用了ordinal()方法
}
}
}
运行结果:
枚举类型的ordinal()方法用于获取某个枚举对象的位置索引值。
3.枚举类型中设置构造方法(给枚举常量赋值)
在枚举类型中,可以添加构造方法,前提是被private修饰符修饰。添加构造方法的作用是为了给枚举常量赋值,赋什么类型的值,写含什么类型参数的构造方法。枚举类定义的构造方法语法如下:
public class Menu {
public enum Constants{
Constants_A("张三"),
Constants_B("李四"),
Constants_C("王五"),
Constants_D(10);
private String description;
private int i;
private Constants(){} //枚举类默认构造方法
private Constants(String description){ //枚举类String类构造方法
this.description=description;
}
private Constants(int i){ //枚举类int类构造方法
this.i =i;
}
}
}
无论时有参还是无参构造方法修饰权限都是private。想要为枚举常量赋值,需要如上图创建对应数据类型的构造方法。 如果缺少这一步(写构造方法),给枚举常量赋值会报错的。
若想获得我们给这些常量赋的值,可以看如下代码,在枚举类中自定义get()方法(当然这些方法权限修饰符为public):
public class Menu {
public enum Constants{
Constants_A("张三"),
Constants_B("李四"),
Constants_C("王五"),
Constants_D(10);
private String description;
private int i;
private Constants(){}
private Constants(String description){
this.description=description;
}
public String getDescription() { //获得String数据
return description;
}
private Constants(int i){
this.i =i;
}
public int getI(){ //获得int数据
return i;
}
}
public static void main(String[] args) {
for(int i=0;i<Constants.values().length;i++){
System.out.println(Constants.values()[i] + "枚举常量的内容为:" + Constants.values()[i].getDescription());
}
System.out.println(Constants.values()[3] + "枚举常量的内容为:" + Constants.values()[3].getI());
}
}
运行结果:
如图所示,添加对应数据类型的构造方法,给枚举常量赋值,最后自定义对应数据类型的get()方法,即可获得枚举常量的赋值内容。
总结
枚举类型的声明为提供了一种友好的变量定义方法,枚举了某种数据类型所有可能出现的值。枚举可以使数据类型安全,数据定义更加紧凑有效,能够与程序的其他部分实现完美交互,运行效率也很高。有补充或指正的内容,欢迎读者在评论区中留言。