`
silentJesse
  • 浏览: 107542 次
  • 性别: Icon_minigender_1
  • 来自: 福建厦门
社区版块
存档分类
最新评论

枚举的理解

JVM 
阅读更多
1.为什么引入枚举

2.枚举的地位:枚举和类、接口有一样的地位---->他的外围声明方式和类、接口一样
举一个例子如下:
有一个Color.java的文件,如下:
public enum Color{

  RED,BLUE,BLACK,YELLOW,GREEN

}

/*
外围定义:public enum Color{}..和类、接口声明方式是一样的
 */



3.与接口和类的区别及其本质:
Java 语言中的枚举(enum)只是编译现象而已,基本上完全在编译器中实现,
由编译器执行类型检查和类型推断,然后生成普通的class的字节码
将上述的Color的字节码文件Color.class反编译之后的源代码为:

public final class Color extends Enum
{
	public static final Color RED;
	public static final Color BLUE;
	public static final Color BLACK;
	public static final Color YELLOW;
	public static final Color GREEN;
	private static final Color ENUM$VALUES[];

	private Color(String s, int i)
	{
		super(s, i);
	}

	public static Color[] values()
	{
		Color acolor[];
		int i;
		Color acolor1[];
		System.arraycopy
                  (acolor = ENUM$VALUES, 0, 
                  acolor1 = new Color[i = acolor.length], 0, i);
		return acolor1;
	}

	public static Color valueOf(String s)
	{
		return (Color)Enum.valueOf(test/Color, s);
	}

	static 
	{
		RED = new Color("RED", 0);
		BLUE = new Color("BLUE", 1);
		BLACK = new Color("BLACK", 2);
		YELLOW = new Color("YELLOW", 3);
		GREEN = new Color("GREEN", 4);
		ENUM$VALUES = (new Color[] {
			RED, BLUE, BLACK, YELLOW, GREEN
		});
	}
}
/*
从这里我们可以得出以下的结论:
(1)在未编译器之前(也就是在java文件中)enum不是一个类,所以他并不能new,所以在也不能调用其构造函数,其声明只能按枚举规定的语法来
(2)而实际在jvm中enum声明定义的类型就是一个类(继承了java.lang.Enum).
但其构造函数为私有..
所以这个类在外部是不能生成对象..
只能类内部生成,且其在内部构造的对象都是public static final类型的
(3)从上面反编译的结果可以看出其中的枚举值本质是编译后的类的对象

从(2)和(3)可以看出这个类在jvm中的对象个数是由其枚举值的个数来决定的.
*/


4.枚举的声明和使用
在声明时有四点和正常的类不一样
(1)按关键字使用enum声明枚举
(2)不能构造枚举对象.
(3)声明枚举值
(4)构造函数必须是私有的
(4)switch(表达式)
//表达式可以是一个"字符串",但编译成字节码后跟正常的类一样,只是把字符串变成了unicode编码
其他的可以和正常的类一样的使用和声明
例如可以为其声明变量函数,成员变量,
但再强调不允许调用其构造函数

以下是一个字符串类型的枚举声明示例

public enum Color {
RED("red"),BLUE("blue"),BLACK("black"),YELLOW("yellow"),GREEN("green");

//Color color = new Color("test", 10);
private Color(String color){
this.color = color;
}
private String color = null;

public int test = 0;

public String getColor() {
return color;
}

public void setColor(String color) {
this.color = color;
}

//public static Color obj = new Color("red");

}

可以自己反编译看一下有什么不一样
分享到:
评论

相关推荐

    理解java枚举类型

    理解Java枚举类型对于编写高质量、易于维护的代码至关重要。 一、枚举的声明与创建 在Java中,枚举可以使用`enum`关键字来声明。基本的枚举定义格式如下: ```java public enum Color { RED, GREEN, BLUE } ``` ...

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

    首先,让我们理解枚举类的基本概念。枚举类在Java中用于定义一组相关的固定数量的值,这些值通常代表常量。例如: ```java public enum Color { RED, GREEN, BLUE } ``` 在这个例子中,`Color`枚举定义了三个常量...

    深入理解 Java 枚举(枚举的方法+枚举的特性+枚举可以实现接口+组织枚举+策略枚举+枚举工具类等)

    深入理解 Java 枚举 Java 枚举是 Java 语言中的一种特殊类型,自 JDK 5 开始引入,使用 enum 关键字修饰。在 Java 中,枚举是一种受限制的类,具有自己的方法。枚举的本质是 java.lang.Enum 的子类,它提供了一些...

    java枚举实例代码

    Java枚举(enum)是Java语言中的一种特殊数据类型,用于定义一组有限的常量,这些常量在程序中作为固定的值使用。枚举在Java中被引入,目的...通过枚举实例代码的学习,初学者能够更好地理解和掌握这一强大的编程工具。

    枚举学习源代码

    通过"Enum_study"这个压缩包文件,你将能够找到与枚举相关的源代码示例,这将有助于你实践并深入理解枚举在不同情境下的应用。通过阅读相关文档和分析代码,你可以更好地掌握枚举的使用技巧,并将其应用于你的项目中...

    枚举各类波形实例_枚举_数字波形_

    总之,“枚举各类波形实例”是一个将枚举数据结构与数字波形处理相结合的实际应用案例,它展示了如何通过编程来管理和呈现不同类型的数字波形,这对于理解枚举在信号处理中的应用以及提升编程技能具有重要意义。

    Java面试枚举从使用到原理

    在面试中,对枚举的理解和应用是衡量开发者专业技能的重要标准之一。本篇文章将深入探讨Java枚举的使用及其背后的原理。 一、枚举的定义与使用 1. 基本用法: 在Java中,枚举可以通过`enum`关键字来创建。例如,...

    易语言模拟枚举类型

    7. 文档注释:由于枚举是模拟的,所以对于每个枚举值,需要添加详细的注释,说明其含义和用途,以便于其他开发者理解和使用。 在提供的"易语言模拟枚举类型源码"中,我们可以看到作者如何巧妙地运用易语言的特性,...

    Java枚举类型Enum的用法

    Java枚举类型(Enum)是Java SE ...理解并熟练使用枚举,能够使代码更加清晰、易读,同时避免了常量管理中的潜在问题。在实际开发中,尤其是在设计模式、状态机或者表示固定集合的场景下,枚举类型是非常有用的工具。

    java枚举类型说明

    ### Java枚举类型详解 #### 一、引言 在Java编程语言中,枚举(Enum)作为一种重要的数据类型,在程序设计中扮演着不可或缺的角色。...通过理解和利用枚举类型的特性,开发者可以编写出更加健壮和高效的程序。

    USB枚举详细过程剖析

    从驱动开发网看到一篇《USB枚举详细过程分析》,依据自己的理解和经验对原文稍加改动。本文仅供参考,一些顺序并不是固定的。  本文描述的是Windows系统的USB枚举过程,但对嵌入式系统自行开发的USB主机驱动程序也...

    枚举 USB HUB 设备

    此外,`USBView`工具是Windows SDK中的一个实用程序,可以用来查看和枚举系统的所有USB设备和HUB,这对于调试和理解USB枚举过程非常有帮助。 总结起来,枚举USB HUB设备是系统管理和控制USB设备的关键环节。无论是...

    枚举类型.pptx

    枚举类型的使用,能够使程序更加直观、易于理解和维护。 #### 二、枚举的优点 1. **可读性高**:通过明确的命名来代替数值或字符串,使得代码更加易读。 2. **安全性高**:枚举类型的值在编译时即被限定,避免了...

    mybatis入门实战之枚举类型

    在Java开发中,MyBatis是一个非常...项目"MyBatisLearn02"中的demo应该包含了这些实现,你可以下载运行,以更直观地理解这个过程。在实践中,熟练掌握枚举和TypeHandler的使用,将有助于提高代码的可维护性和可读性。

    简单总结java枚举类型

    Java枚举类型是Java语言中一种特殊的类,用于...对初学者来说,理解枚举并熟练运用能够提升编程能力,避免错误,同时提高代码的可读性和可维护性。通过实践和学习,你可以掌握如何有效地使用枚举来解决各种编程问题。

    USB.zip_USB HUB _USB 枚举_usb_usb端口的枚举_枚举HUB

    文件“USBDetection”可能包含了有关如何检测和枚举USB设备,特别是在涉及USB Hub时的详细过程,例如可能包含代码示例或工具说明,用于帮助用户理解并操作USB设备的枚举流程。 总之,USB枚举是USB系统正常运行的...

    Java中的“枚举类型

    ### Java中的“枚举类型”知识点详解 #### 一、引言 在Java编程语言中,枚举(Enum)作为一种特殊的类,其设计初衷是为了更好地处理...理解并熟练掌握枚举类型的使用,能够帮助开发者编写出更加清晰、可维护的代码。

    易语言暴力枚举驱动

    3. **信息解析**:解析枚举得到的驱动信息,可能涉及结构体解析和内存布局理解。 4. **异常处理**:由于内核级别的操作风险较高,需要设置适当的异常处理机制。 5. **日志记录**:记录枚举过程中的关键信息,便于...

    java 枚举学习心得

    通过深入理解枚举的特性和用法,可以更好地应对各种编程场景,尤其是在处理固定值集合或需要类型安全的场合。在Java EE和Android开发中,枚举也扮演着不可或缺的角色,特别是在设计模式和框架的实现中。因此,掌握...

Global site tag (gtag.js) - Google Analytics