`

java 枚举Enum

阅读更多

 1. 当你创建一个enum类时,编译器会为你生成一个相关的类,这个类继承自Enum

/**
 * 枚举类默认继承的java.lang.Enum类(编译器控制),所以不能再继承其它类 
 * Enum实现了 Comparable<E>, Serializable 接口
 */
public enum MeiJu {
	MEIJU1, MEIJU2, MEIJU3, MEIJU4
} 

 

public class Test {
	public static void main(String[] args) {
		// 注意这里已经向上转型了哦
		for (Enum<MeiJu> meiju : MeiJu.values()) {

			// ------------------下面都是父类(Enum)提供的方法--------------------

			// 返回枚举常量的序数ordinal,final修饰,不可变,按声明时的顺序
			System.err.println("ordinal():" + meiju.ordinal());
			// 输出:0 、1 、 2、3

			// 返回枚举常量的名称name,final修饰,不可变
			// 跟meiju.toString()返回内容是一样的:都是 return this.name;
			// 不过如果使用toString(),可以对其重写
			System.err.println("name():" + meiju.name());
			// 输出: MEIJU1 、MEIJU2 、MEIJU3、MEIJU4

			// 只能比较同一枚举类下的枚举常量,so 比较的是声明顺序ordinal
			System.err.println("compareTo():" + meiju.compareTo(MeiJu.MEIJU2));
			// 输出 -1 、0 、1、2

			// 返回 return this == MeiJu.MEIJU2;
			System.err.println("equals():" + meiju.equals(MeiJu.MEIJU2));
			// 输出:false true false false

			// 跟这个结果一样meiju.getClass(),没有找到不一样的情况 ??
			System.err.println("getDeclaringClass():" + meiju.getDeclaringClass());
			// 输出:都是 class package.MeiJu

			// 还有一个 hashCode() 它返回的是 super.hashCode();
			// Enum 的 super 就是 Object 了

			// 搞不明白这玩意干什么用
			MeiJu valueOf = Enum.valueOf(meiju.getDeclaringClass(),meiju.name());

			// 其它就没什么了吧。。。。上面蓝色字体略掉了

		}
	}
}

       细心人士,会发现上面的代码中,我并没有给枚举类MeiJu添加方法,而且Enum中也没有values()方法。原因看下面两个图片比较一下

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  2. 给枚举定义方法,记得在枚举常量后面加";"

public enum MeiJu {
	//定义每个枚举实例,如果有构造方法,必须通过构造方法初始化定义;
	MEIJU1("husband"),
	MEIJU2("wife"),
	MEIJU3("son"),
	MEIJU4("xiaosan");

	private String property; //属性

	private MeiJu(String property) { //只能在内部使用
		this.property = property;
	}

	@Override
	public String toString() {
		return name() + ":" + property;
	}
	
	public static void main(String[] args) {
		for (MeiJu meiju : MeiJu.values()) {
			System.err.println( meiju.toString());
		}
	}
}

 输出:

 

        MEIJU1:husband
        MEIJU2:wife
        MEIJU3:son
        MEIJU4:xiaosan

 


3. 枚举使用 switch

public class Test {

	public String test(MeiJu meiju) {
		switch (meiju) {
			case MEIJU1 : return meiju.toString();
			case MEIJU2 : return meiju.toString();
			case MEIJU3 : return meiju.toString();
			case MEIJU4 : return meiju.toString();
			default :return "";
		}

	}

	public static void main(String[] args) {
		Test t = new Test();
		System.err.println(t.test(MeiJu.MEIJU4));
	}
}

 输出:MEIJU4:xiaosan

 

 

4. Class还给枚举类弄了个专属武器getEnumConstants(),所以即使在enum被向上转型也能得到其所有实例。

public class Test {

	public void test(Enum<?> meiju) {
		// 注意:Enum是没有 meiju.values() 方法的。
		// 不过Class中有方法getEnumConstants()可以得到枚举所有实例
		for (Enum<?> en : meiju.getClass().getEnumConstants()) {
			System.err.println(en.toString());// 覆盖后的toString
		}
	}

	public static void main(String[] args) {
		Test t = new Test();
		t.test(MeiJu.MEIJU4);
	}
}
public class Test {
	// 上面方法的扩展
	public <E extends Enum<E>> void test(Class<E> meiju) {
		// 泛型 参考上一篇 java泛型
		for (E en : meiju.getEnumConstants()) {
			System.err.println(en.toString());
		}
	}

	public static void main(String[] args) {
		Test t = new Test();
		t.test(MeiJu.MEIJU4.getDeclaringClass());
		// t.test(MeiJu.MEIJU4.getClass()); //这样就不行了
		t.test((Class) MeiJu.MEIJU4.getClass());// 这样可以,但是一堆警告
	}
}
  

  输出:

       MEIJU1:husband
       MEIJU2:wife
       MEIJU3:son
       MEIJU4:xiaosan

 

 

5. 通过枚举管理枚举 

public enum MeiJu {
	;//注意这里有个";"

	enum MeiJu1 {A, B, C}

	enum MeiJu2 {D, E, F}

	public static void main(String[] args) {
		for (MeiJu1 meiju1 : MeiJu.MeiJu1.values()) {
			System.err.print(meiju1); //输出:ABC
		}
	}
}

 

 

6.EnumSet现在是个抽象类(JavaSE 7),EnumMap不是 ,不行了搞不动了。。这就研究到这了

0
3
分享到:
评论

相关推荐

    Java枚举类型Enum的用法

    Java枚举类型(Enum)是Java SE 5.0引入的一种新的数据类型,它为开发者提供了更为强大且安全的方式来表示一组常量。枚举在Java中不仅是一个类,还是一种特殊的类型,允许我们定义自己的常量集合。接下来,我们将...

    Java SE程序 Enum枚举类

    Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类...

    高阶Java-Java枚举类型 enum 应用详解

    本篇文章将深入探讨Java枚举的特性、用法以及如何在实际开发中充分利用它们。 一、枚举的基本用法 1. 声明枚举类型: ```java public enum Color { RED, GREEN, BLUE } ``` 在这里,`Color`是枚举类型,`RED`, `...

    java enum 枚举 学习资料

    "Java Enum 枚举学习资料" Java Enum 枚举学习资料是 Java 编程语言中的一种特殊类型,它主要用来实现一组固定的常量。 Enum 枚举类型是 Java 5 中引入的一种新特性,旨在解决传统的 int 枚举常量的缺陷。 1. 枚举...

    java枚举实例代码

    Java枚举(enum)是Java语言中的一种特殊数据类型,用于定义一组有限的常量,这些常量在程序中作为固定的值使用。枚举在Java中被引入,目的是为了更好地管理和使用常量,提高代码的可读性和安全性。在本实例代码中,...

    java枚举类型enum的使用

    ### Java 枚举类型 enum 的使用详解 #### 一、枚举类型概述 在 Java 中,枚举(enum)是一种特殊的类,它被用来表示一组固定的常量值。枚举类型自 JDK 1.5 开始引入,为开发者提供了一种更加安全、简洁的方式来...

    java中enum枚举的详细用法

    Java中的枚举(enum)类型是在JDK 1.5版本引入的一个强大的特性,它用于定义一组相关的常量。在C/C++等语言中,枚举通常用来表示一组具有固定值的常量集合,但在Java中,枚举不仅限于此,它提供了更多的功能和灵活性...

    Java中的枚举类型Enum示例源代码

    Java枚举支持单例模式,因为每个枚举常量都是唯一的,不能通过`new`关键字实例化。此外,枚举类型的枚举常量可以按照声明顺序自然排序,这使得它们在处理有序数据时非常方便。 枚举类型还可以与其他集合框架结合...

    全面掌握java枚举类型(enum-type)1

    全面掌握 Java 枚举类型(enum type) Java 枚举类型是一种特殊的数据类型,它可以取有限个数的明确值。枚举类型的引入解决了 int 枚举模式和 String 枚举模式的缺点,提供了类型安全性、可读性和性能等优势。 ...

    java 枚举(enum) 详解(学习资料)

    Java 枚举(enum)是 Java 语言中的一个重要特性,自 Java 5 开始引入。枚举用于定义一组相关的常量,这些常量通常代表一个有限的、预定义的值集合。枚举类是一种特殊的类,它具有以下特点: 1. **枚举类的声明**:...

    java枚举状态机

    Java枚举(Enum)状态机是一种使用枚举类型来实现状态转换逻辑的编程技术,它在Java编程中被广泛应用于管理对象的状态变化。状态机是一种模型,用于描述一个系统或对象在不同时间点可能存在的状态以及如何从一个状态...

    java枚举类型说明

    ### Java枚举类型详解 #### 一、引言 在Java编程语言中,枚举(Enum)作为一种重要的数据类型,在程序设计中扮演着不可或缺的角色。本文将深入探讨Java枚举类型的特性和用法,并通过具体实例说明其优势所在。枚举...

    Java枚举(enum)类型深度解析:特性、用法与最佳实践

    本文将深入探讨Java枚举类型的特点、用法以及最佳实践。 Java中的枚举类型是一种强大的特性,它提供了一种类型安全的方式来表示一组固定的常量。枚举类型可以包含字段、方法和构造器,使得它们可以携带额外的信息和...

    java枚举类用法

    Java枚举类型(enum)是Java语言中一种特殊的类,用于定义一组固定的常量。它在许多场景下作为替代常量或单例模式的选择,提供了更安全、更易读的代码。下面我们将深入探讨Java枚举类的用法及其优势。 1. **枚举的...

    简单总结java枚举类型

    Java枚举类型是Java语言中一种特殊的类,用于定义固定的常量集合,它提供了一种安全、类型化的方式来表示一组有限的值。枚举在Java中被引入为一个完整的类型,不同于C++中的枚举,这使得Java枚举更加强大且易于使用...

    说说Java中的枚举 转 可以了,够了 包括EnumSet(Map)

    这篇博客将深入探讨Java枚举的特性和使用方法,包括`EnumSet`和`EnumMap`这两个与枚举相关的数据结构。 首先,枚举定义的基本语法是`public enum EnumName {constant1, constant2, ...}`。每个枚举常量都是`...

    java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名

    枚举(Enumeration)是Java中的一个特殊类类型,用于定义一组常量。本项目"test-enum-demo-master"显然是一个用于演示如何通过反射来操作枚举类的示例。 首先,让我们理解枚举类的基本概念。枚举类在Java中用于定义...

    理解java枚举类型

    Java枚举类型是Java语言中的一种特殊的类,用于定义一组固定的常量集合。它在Java中扮演着重要的角色,提供了一种安全、类型化的常量表示方式,比传统的final static变量更具有优势。理解Java枚举类型对于编写高质量...

    enum枚举的方法

    enum枚举的方法

Global site tag (gtag.js) - Google Analytics