Java 枚举(2)

来源:互联网 发布:mac 10.10.5 编辑:程序博客网 时间:2024/06/06 09:06

   在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;}@Overridepublic 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,防止用户生成实例,破坏唯一性





原创粉丝点击