Java枚举类型

前言

在众多编程语言中如果想选出一个最没有用的数据类型,那我觉得肯定是枚举类型了,因为通过定义常量的方式就可以替代枚举的定义。其实单从数值运算方面考虑枚举类型,它的存在确实没有什么必要,但如果从程序可读性角度来看,它就是程序员的福音,毕竟程序代码是给人看的,试想一下,用1~7来代表星期和用枚举类型来表示星期的直观性差异就知道了。此外在Java中枚举类型本质是以类的形式存在的,它的一个优点就是提供了安全检查的功能

常量与枚举

通常在接口中用final与static来修饰常量,这样一来该常量就不能够被修改,方便在程序中直接使用。

public interface Constants {

       public static final int Constants_A = 1;

       public static final int Constants_B = 2;

       public static final int Constants_C = 3;

}

当使用enum关键字定义枚举类型时,常量可以这样定义:

public enum EnumConstants {

       Constants_A,

       Constants_B,

       Constants_C;

}

枚举类型可以看作一个类,继承于java.lang.Enum类,当定义一个枚举类型时,每一个枚举成员都可以看作是枚举类型的一个实例,这些枚举成员都默认被final、public、static修饰,所以当使用枚举类型成员时直接使用枚举类型名称调用枚举类型成员即可。

枚举类型中的构造方法

枚举类型比较有意思的是它的构造方法,通过自定义构造方法,用户可以实现自定义不同的枚举。比如定义一个描述星期的枚举、一个描述颜色的枚举、一个描述订单状态的枚举,这些在软件项目中使用频率都很高,在程序设计中合理利用枚举,可以使代码可读性大大增强。

枚举类型的成员可以视为枚举的一个实例,那么我们可以为它们添加构造方法,但是规定这个构造方法必须为private修饰符所修饰。以下是一个weekdayenum构造方法实例。

public enum WeekDayEnum {
	Monday(1,"星期一"),
	Tuesday(2,"星期二"),
	Wednesday(3,"星期三"),
	Thursday(4,"星期四"),
	Friday(5,"星期五"),
	Saturday(6,"星期六"),
	Sunday(7,"星期天");
	
	private int i;
	private String description;
	//定义WeekDayEnum构造方法
	private WeekDayEnum(int i, String description){
		this.i = i;
		this.description =description;
	}
	//定义外部访问方法
	public int Getnum(){
		return i;
	}
	public String getDescroption(){
		return description;
	}
}

public class Main {
	public static void main(String[] args) {
		//静态方法需要用 类名.方法 调用,静态方法属于类
		//循环输出星期枚举描述
		for(int i = 0; i < WeekDayEnum.values().length; i++){
			System.out.println(WeekDayEnum.values()[i]+" 代表"+WeekDayEnum.values()[i].getDescroption());
		}
	}

}

枚举类型声明提供了一种用户友好的变量定义方法,枚举了某种数据类型所有可能出现的值,它具有以下优点:

1.类型安全

2.紧凑有效的数据定义

3.可以和程序其他部分完美交互

4.运行效率高

总结

枚举在编程语言中作为最尴尬的形象出现,特别是从数据运算处理角度看待时。因为几乎没有人会在程序中对枚举进行加减乘除等数据处理操作,但不可忽略的一点是,枚举在程序中应用广泛,最重要一点是它能很好与程序其他部分完美交互,能使编写的代码通俗易懂,毕竟代码是用来看的,程序是用来执行的。秋意绵绵,整理了一下Java枚举知识,温故而知新。

 

 

### Java 枚举类型的定义使用 #### 定义枚举类型Java中,枚举类型通过`enum`关键字定义。枚举类型本质上是一种特殊的类,它可以包含常量、方法和构造函数等[^3]。以下是一个简单的枚举类型定义示例: ```java public enum DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } ``` 上述代码定义了一个名为`DayOfWeek`的枚举类型,其中包含一周七天的常量。 #### 枚举类型的使用 枚举类型的主要作用是管理一组固定的常量集合[^2]。例如,可以将`DayOfWeek`用于表示一周中的某一天。以下是枚举类型的基本用法示例: ```java public class EnumExample { public static void main(String[] args) { DayOfWeek today = DayOfWeek.MONDAY; System.out.println("Today is " + today); } } ``` #### 枚举类型的常用方法 Java枚举类型提供了多个内置方法,如`values()`、`ordinal()`和`name()`等[^1]。这些方法可以帮助开发者更方便地操作枚举类型。 - `values()`:返回枚举类型的所有常量值。 - `ordinal()`:返回枚举常量的序号(从0开始)。 - `name()`:返回枚举常量的名称。 以下是一个使用这些方法的示例: ```java public class EnumMethodsExample { public static void main(String[] args) { for (DayOfWeek day : DayOfWeek.values()) { System.out.println("Name: " + day.name() + ", Ordinal: " + day.ordinal()); } } } ``` #### 枚举类型实现接口 枚举类型可以实现一个或多个接口[^3]。例如,以下代码展示了如何让枚举类型实现`Comparable`接口: ```java public enum Priority implements Comparable<Priority> { LOW, MEDIUM, HIGH; @Override public int compareTo(Priority other) { return this.ordinal() - other.ordinal(); } } ``` #### 枚举类型用于`switch`语句 枚举类型可以很好地`switch`语句结合使用[^2]。以下是一个示例: ```java public class EnumSwitchExample { public static void main(String[] args) { DayOfWeek day = DayOfWeek.FRIDAY; switch (day) { case MONDAY: System.out.println("Start of the week."); break; case FRIDAY: System.out.println("End of the work week."); break; default: System.out.println("Another day."); } } } ``` #### 枚举类型的注意事项 - 枚举类型常量是单例的,不能通过`new`关键字创建实例。 - 枚举类型可以定义构造函数、字段和方法,但其构造函数必须是私有的[^3]。 ### 示例代码 以下是一个综合示例,展示如何定义和使用带有字段和方法的枚举类型: ```java public enum Planet { MERCURY(3.303e+23, 2.4397e6), VENUS(4.869e+24, 6.0518e6), EARTH(5.976e+24, 6.37814e6); private final double mass; // 千克 private final double radius; // 米 Planet(double mass, double radius) { this.mass = mass; this.radius = radius; } public double getMass() { return mass; } public double getRadius() { return radius; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值