`
learen
  • 浏览: 11148 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员 枚举的深入理解

 
阅读更多

   ------- android培训java培训、期待与您交流! ----------

   首先我们知道枚举是一个特殊的类,构造方法是私有的,那么它的对象是如何构造的呢?或者说是什么时候构造的呢?带着这个疑问,我查阅了一下枚举类的反编译代码(可能不准确,仅供参考)

enum Color {  
   
	// 所有的枚举值都是类静态常量  
	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;  

	// 初始化过程,对枚举类的所有枚举值对象进行第一次初始化  
	static {  
	      0  new hr.test.Color [1]   
	      3  dup  
	      4  ldc <String "RED"> [16] //把枚举值字符串"RED"压入操作数栈  
	      6  iconst_0  // 把整型值0压入操作数栈  
	      7  invokespecial hr.test.Color(java.lang.String, int) [17] //调用Color类的私有构造器创建Color对象RED  
	     10  putstatic hr.test.Color.RED : hr.test.Color [21]  //将枚举对象赋给Color的静态常量RED。  
	      .........  枚举对象BLUE等与上同  
	    102  return  
	};  
	    
	  // 私有构造器,外部不可能动态创建一个枚举类对象(也就是不可能动态创建一个枚举值)。  
	private Color(java.lang.String arg0, int arg1){  
	     // 调用父类Enum的受保护构造器创建一个枚举对象  
	     3  invokespecial java.lang.Enum(java.lang.String, int) [38]  
	};  
	   
	public static Color[] values();  
	    
	   // 实现Enum类的抽象方法    
	public static Color valueOf(String arg0);  
}  

   源码之前,了无秘密。通过上面的源码我们可以看到,枚举类型的各个值是在这个类第一次被类加载器加载的时候在静态代码中被构建的,当类加载完成后,类的各个对象就都已经生成好了,有且只有一份,所以它可以用来实现单例模式。

   通过观看张孝祥老师的视频,我发现枚举在描述一定个数的具有相同属性的元素方面具有特别好的效果。比如交通灯项目中的路,只有8条(只说明问题,不管实际是双向四车道还是双向八车道),个数是一定的,而且功能相似。再比如银行业务系统中服务窗口一共有6个,数目也是固定的而且属性相似。这些问题都可以抽象成枚举,当然你用单例模式也是可以的,但是没有枚举直观。我想这也就是枚举存在的真正意义吧!简化了人们的开发,对问题的描述更加准确。

   所有的枚举类都继承了Enum的方法,具体每个方法都起到什么作用请自行查看API,在这里就不做详细介绍了。

分享到:
评论

相关推荐

    Java基础案例教程.rar

    本教程出自知名教育机构黑马程序员,该机构以其深入浅出的教学方式和实用的案例著称。 在本教程中,你将学习到以下关键知识点: 1. **Java环境搭建**:首先,你需要了解如何下载和安装Java Development Kit (JDK)...

    黑马程序员入学Java知识

    ### 黑马程序员入学Java知识 #### Java概述与基础知识 1. **何为编程?** - 编程是通过特定的计算机语言来编写指令,让计算机执行一系列任务的过程。 2. **Java语言概述,历史、特点** - **概述**:Java是一种...

    java黑马笔记.rar.rar

    "java黑马笔记.rar.rar"很可能是一个包含详细Java学习资料的压缩文件,由知名的黑马程序员培训机构提供。这样的笔记通常涵盖Java基础、进阶特性、面向对象编程、异常处理、集合框架、多线程、IO流、网络编程、JVM...

    Java基础案例教程(第2版)-教学设计.zip

    《Java基础案例教程(第2版)》是一本旨在教授初学者Java编程基础知识的教材,其教学设计旨在通过实例引导学生深入理解Java语言的核心概念。本教程覆盖了从环境搭建到程序设计的各个环节,旨在帮助学生建立起坚实的...

    jdk9中文开发帮助文档jdk-9_doc-api

    通过阅读文档,开发者可以深入理解这些改进的具体细节。 ### 7. 其他改进与新特性 - 更强大的 `ProcessHandle` 和 `ProcessBuilder` - `Stream` API 的增强,例如 `IntStream.iterate()` 和 `LongStream.iterate()`...

    2018最新版Java程序员面试宝典+题库

    这本书由"黑马程序员"机构出品,专门针对Java开发者在求职过程中的需求,帮助他们在面试中展现出扎实的技术功底。 1. **Java基础** - 类与对象:深入理解面向对象编程的基本概念,包括封装、继承、多态。 - 数据...

    linux编程基础.ppt

    Linux编程对于入门级别的读者来说是一扇通向系统级开发的门,通过学习,读者将能够理解和掌握Linux开发环境下的基本操作。 在Linux下进行C编程,首先要了解的是编程风格。编程风格直接影响到代码的可读性和维护性。...

    java入门经典第五章

    9. **枚举与注解**:枚举是Java中预定义的类,用于表示一组固定值。注解是一种元数据,可以为编译器和JVM提供额外的信息,用于代码的自解释和工具支持。 10. **实践案例**:理论知识的讲解通常会伴随着实际编程案例...

    二级C语言学习资料

    “C语言全国计算机二级等级考试教程第八章地址和指针(章节带习题).ppt”是C语言的一个重要特色,讲解了内存地址、指针的使用、指针变量的声明与赋值、指针与数组、指针与函数的关系等,理解指针有助于更深入地理解和...

    毕向东25天Java基础源代码

    【标题】"毕向东25天Java基础源代码"涵盖了Java编程语言的基础概念和技术,是初学者学习Java的重要参考资料。这个教程由知名教育机构黑马程序员的讲师毕...对于想要深入理解Java编程的初学者来说,这是一个宝贵的资源。

    Java面试宝典2018-最全面试资料

    这份资料由黑马程序员精心编纂,集合了多家知名公司的面试题目,涵盖了广泛且深入的Java知识点。 首先,基础篇中,你需要熟悉Java语言的基础语法,包括但不限于数据类型(基本类型与引用类型)、运算符、流程控制...

    毕向东静态06

    在"黑马程序员_毕向东_Java基础视频教程第06天-09-面向对象(单例设计模式).avi" 这个文件中,毕向东老师可能会详细讲解以下内容: 1. **字符串基础**: - 字符串对象的创建:通过`new String()`或字面量`"abc"`。 ...

    JavaEE物联

    4. **JSP技术**:深入理解JSP运行原理,掌握JSP的内部对象、表达式、脚本片段、声明和注释,以及EL表达式。此外,还会学习如何处理JSP中文乱码问题,使用JSP标签和JavaBean。 5. **JavaWEB高级开发技术**:包括...

    c++课程学习笔记高亮版

    这是一份专为C++初学者和进阶者设计的学习资料,基于黑马程序员的C++课程,包含了全面且深入的C++知识点讲解。这份学习笔记采用Markdown格式,使得内容更加清晰易读,便于理解和复习。11/20的日期可能表示这是课程...

    轻松搞定C++语言

    理解指针的概念、操作和安全使用对于深入理解C++至关重要。 3. **类与对象**:C++是面向对象的语言,类是定义对象模板,而对象是类的实例。理解类的构造函数、析构函数、成员函数、封装、继承和多态性是学习OOP的...

    Java基础最全笔记文档

    总的来说,Java的学习是一个系统的过程,从基础知识到高级特性的掌握,都需要不断实践和深入理解。无论是初学者还是经验丰富的开发者,通过全面学习和掌握这些知识点,都能提升自己的编程能力和解决问题的能力。在...

    JAVA面试宝典

    《JAVA面试宝典》是程序员在应聘时的重要参考资料,它由黑马程序员精心制作,涵盖了面试中经常遇到的技术问题和知识点,为求职者提供了系统的复习指南。这份宝典不仅包括Java基础知识点,还涉及了面向对象、JavaSE...

    C++程序设计谭浩强100%25完整

    此外,C++还提供了复合数据类型,如数组、结构体、联合体和枚举。表达式则是由变量、常量、运算符和函数调用组成的计算单元,它们遵循特定的语法规则。 ### 面向过程的程序设计 #### 程序设计初步 面向过程的编程...

Global site tag (gtag.js) - Google Analytics