Java 枚举(2)

本文深入探讨了Java枚举的使用方法及其应用场景,包括枚举的基本定义、枚举类型的构造器为何必须私有、枚举与枚举集合类的使用等,并通过示例代码展示了枚举在实际开发中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在有了枚举,可以把相关的常量分组到一个枚举类型里,这样就很好的阅读性又避免的安全性问题。

  枚举的应用:

import java.util.EnumMap;
import java.util.EnumSet;

public enum Gender {
	// 利用构造函数传参

	MAN(1), WOMAN(2);

	// 定义私有变量
	private int name;

	// 构造函数,枚举类型只能为私有
	private Gender(int name) {
		this.name = name;
	}

	@Override
	public String toString() {

		return String.valueOf(this.name);
	}

}

class EnumBiz {
	/**
	 * enum
	 */
	public static void testEnum() {
		  System.out.println("枚举类型的遍历 ......");
		//获得所有的数据
		Gender[] genders = Gender.values();
		for (Gender gender : genders) {
			System.out.println("name="+gender.name()+"\tordinal="+gender.ordinal()+"\tvalue="+gender);
		}
		
		System.out.println();
	}
	
	/**
     * 
     * 演示EnumMap的使用,EnumMap跟HashMap的使用差不多,只不过key要是枚举类型
     */
	public static void testEnumMap() {
		
		 System.out.println("EnmuMap对象的使用.....");
//		EnumMap对象的构造函数需要参数传入,默认是key的类的类型
		EnumMap<Gender, String> map= new EnumMap<Gender, String>(Gender.class);
		
		//添加数据
		map.put(Gender.MAN, "男人");
		map.put(Gender.WOMAN, "女人");
		
		//获得所有的数据
		for (Gender gender : Gender.values()) {
			System.out.println("key="+gender.name()+"\tordinal="+gender.ordinal()+"\tvalue="+map.get(gender));
		}
		System.out.println();
	}
	
	/**
	 * 
	 * EnumSet如何使用,EnumSet是一个抽象类,获取一个类型的枚举类型内容
	 * 可以使用allOf方法
	 */
	public static void testEnumSet() {
		
		System.out.println("EnmuSet对象的使用.....");
		
//		EnumMap对象的构造函数需要参数传入,默认是key的类的类型
		EnumSet<Gender> set=  EnumSet.allOf(Gender.class);
		
		
		//获得所有的数据
		for (Gender gender : set) {
			System.out.println(gender);
		}
		System.out.println();
	}
	
	
	
	
}
测试:

public class TestGender {

	public static void main(String[] args) {
		EnumBiz.testEnum();
		
		EnumBiz.testEnumMap();
		
		EnumBiz.testEnumSet();
	}
}

显示效果:



总结:

1、java enum类中为什么构造器必须是私有的? 

     枚举被设计成是单例模式,即枚举类型会由JVM在加载的时候,实例化枚举对象,你在枚举类中定义了多少个就会实例化多少个,JVM为了保证每一个枚举类元素的唯一实例,是不会允许外部进行new的,所以会把构造函数设计成private,防止用户生成实例,破坏唯一性





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值