java枚举

本文深入探讨了枚举在Java编程中的用途,包括简单定义常量集、添加构造方法和属性以实现类似map的功能,以及枚举的本质与工作原理。通过实例展示了枚举如何简化代码并提供更安全、易于维护的解决方案。

1.为何使用枚举

          (1)实际变成中,通常需要一些常量数据集,如周一到周日,性别等,通过枚举就可以表示

          (2)需要一些常量key-value集合,当然可以使用全局单例map,但是用枚举更好实现


2.枚举使用

          (1)简单定义常量集

public enum GenderEnum 
{
	man,women;
}
                  遍历所有常量

	@Test
	public void test() {
		for(GenderEnum ge: GenderEnum.values())
			System.out.println(ge);
	}
               结果为:

man
women
           可以看出,其中每一个常量都是GenderEnum类型的(不然循环不可能取出GenderEnum),所以可以将其中的man、women看做是GenderEnum的实例
           这么来想的话,是不是可以写个构造方法,或者说添加属性,这样的话,每个常量就有了自己的属性。如果是一个属性,不就实现了map的作用吗?

           而jdk枚举已经提供了支持

          (2)添加构造方法和属性

public enum GenderEnum 
{
	man("peter"),women("lisa");

	//成员变量
	private String value;
	
	//构造函数
	private GenderEnum(String value) 
	{
		this.value = value;
	}
	
	//getter
	public String getValue()
	{
		return value;
	}
}
            测试:

	@Test
	public void test() {
		
		for(GenderEnum ge: GenderEnum.values())
			System.out.println(ge.getValue());
	}
             结果为:

peter
lisa

        这么来看,枚举也就看做一个普通的类,常量只是当前类的对象而已。


3.原理

          使用javap命令反编译可以看出:

                  

           实际上就是和我们猜想的一样,常量man、women都是本类的实例而已

### Java 枚举的概念与使用方法 #### 什么是枚举? 在 Java 中,`enum` 是一种特殊的数据类型,用于定义一组固定的常量集合。通过使用 `enum`,可以提高代码的可读性和安全性。 #### 创建和使用枚举 以下是创建和使用枚举的基本方式: ```java public enum Color { RED, GREEN, BLUE; } ``` 上述代码定义了一个名为 `Color` 的枚举类,其中包含三个常量:`RED`, `GREEN`, 和 `BLUE`[^1]。 可以通过以下方式访问这些枚举值: ```java System.out.println(Color.RED); // 输出: RED ``` #### 单例模式中的应用 Java 枚举天然支持单例设计模式。由于每个枚举常量在整个 JVM 生命周期中仅存在一个实例,因此可以直接利用这一特性实现线程安全的单例模式。 示例如下: ```java public enum SingletonEnum { INSTANCE; public void doSomething() { System.out.println("Singleton doing something..."); } } // 调用单例方法 SingletonEnum.INSTANCE.doSomething(); ``` 此代码展示了如何通过枚举来实现单例模式,并调用其方法。 #### 序列化与反序列化的处理 当枚举被序列化后再进行反序列化时,JVM 确保返回的是原始的枚举实例而非新创建的对象。这进一步增强了枚举作为单例使用的可靠性。 #### 遍历枚举值 每一个枚举都隐含提供了一个静态方法 `values()`,该方法能够返回按声明顺序排列的所有枚举常量组成的数组。配合增强型 for 循环即可轻松遍历所有可能取值。 示例代码如下: ```java for (Color color : Color.values()) { System.out.println(color); } ``` 这段程序会依次输出 `RED`, `GREEN`, 和 `BLUE`[^3]。 #### 方法重载于枚举 除了简单的命名外,还可以给枚举添加字段以及构造器,甚至自定义行为逻辑的方法。 例子展示带参数的复杂枚举结构及其操作函数: ```java public enum Planet { MERCURY(3.30E23), VENUS(4.87E24), EARTH(5.98E24); private final double mass; // kilograms Planet(double mass) { this.mass = mass; } public double getMass() { return mass; } } Planet earth = Planet.EARTH; System.out.printf("Earth's mass is %.2f kg%n", earth.getMass()); ``` 这里我们不仅限定了行星名称还附加了质量属性并通过 getter 访问[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值