资料上说:enum是继承自java.lang.Enum的。我直接写了一下,连编译都通不过。后来又找资料才知道,这个继承是有编译器处理的。现在先直接拿下面的例子说事了:用java命令行直接查看编译好的WeekDay.class文件。
D:\workspace\enumtest\bin\com\lzw\enumtest>javap WeekDay Compiled from "WeekDay.java" public class com.lzw.enumtest.WeekDay extends java.lang.Enum{ public static final com.lzw.enumtest.WeekDay MON; public static final com.lzw.enumtest.WeekDay TUE; public static final com.lzw.enumtest.WeekDay WED; public static final com.lzw.enumtest.WeekDay FUR; public static final com.lzw.enumtest.WeekDay FRI; public static final com.lzw.enumtest.WeekDay STA; public static final com.lzw.enumtest.WeekDay SUN; static {}; public boolean getBoolean(); public int getDay(); public static com.lzw.enumtest.WeekDay[] values(); public static com.lzw.enumtest.WeekDay valueOf(java.lang.String); com.lzw.enumtest.WeekDay(java.lang.String, int, int, com.lzw.enumtest.WeekDay); }
即便如此,想了解enum类型,还是要先了解一下java.lang.Enum类。跟进JDK 源码中,很容易发现Enum类的定义:
public abstract class Enum<E extends Enum<E>> implements Comparable<E>,Serializable { } public final int compareTo(E o) { Enum other = (Enum)o; Enum self = this; if (self.getClass() != other.getClass() && // optimization self.getDeclaringClass() != other.getDeclaringClass()) throw new ClassCastException(); return self.ordinal - other.ordinal; }
在enum元素比较是比较它们的ordinal。源码的东西这里不用多说……
下面直接拿例子解析:
1、枚举类WeekDay.java
package com.lzw.enumtest; public enum WeekDay { MON(1), TUE(2), WED(3), FUR(4), FRI(5) { // 重写,替换父的return false @Override public boolean getBoolean() { return true; } }, STA(6), SUN(7); private int day; // 必须私有化构造方法 ,因为枚举类的成员都是static final的 ,不提供外部赋值 private WeekDay(int day) { this.day = day; } public boolean getBoolean() { return false; } public int getDay() { return day; } }
2、测试类TestJava1.java
package com.lzw.enumtest; import java.util.EnumMap; import java.util.Iterator; import java.util.Map.Entry; public class TestJava1 { public static void main(String[] args) { for (WeekDay day : WeekDay.values()) { // :枚举重写了ToString(),说以枚举变量的值是不带前缀的 switch (day) { case MON: System.out.println("周一:" + day.getDay() + " index:" + day.ordinal() + " boolean:" + day.getBoolean()); break; case TUE: System.out.println("周二:" + day.getDay() + " index:" + day.ordinal() + " boolean:" + day.getBoolean()); break; case FRI: System.out.println("周五:" + day.getDay() + " index:" + day.ordinal() + " boolean:" + day.getBoolean()); break; default: break; } } EnumMap<WeekDay, String> enumMap = new EnumMap<WeekDay, String>(WeekDay.class); enumMap.put(WeekDay.WED, "周三"); enumMap.put(WeekDay.SUN, "周日"); Iterator<Entry<WeekDay, String>> iterator = enumMap.entrySet().iterator(); for (; iterator.hasNext();) { Entry<WeekDay, String> entry = iterator.next(); System.out.println(entry.getKey().name() + "__" + entry.getValue()); } } }
很明显枚举的每一个元素都是其实例,并且是static的哦。每一个ordinal都不相同,这也是java.lang.Enum的compareTo方法告诉我们的:不同元素,其ordinal不同。
至于values()方法,直接看上面的编译好的代码
相关推荐
2. **枚举类型**:Bloch强调了枚举类型在Java中的重要性,它比传统的常量类更安全,更易于使用,且能提供更多的功能,如枚举方法和枚举实例的集合操作。 3. **泛型**:第二版《Effective Java》详尽讨论了Java泛型...
《Effective Java》是Java开发领域的一本经典著作,由知名程序员Joshua Bloch撰写。这本书深入探讨了如何编写高效、可维护的Java代码,并提出了许多实用的编程实践和设计原则。通过对书中源代码的分析,我们可以更...
《Effective Java》是Java开发领域的一本经典著作,由Joshua Bloch撰写,书中总结了23条编程经验法则,旨在帮助开发者写出更高效、更可靠、更易于维护的Java代码。这个压缩包包含了作者在书中提到的一些示例代码,...
根据提供的信息,我们可以推测这三本书分别是Java初学者应该阅读的经典之作。接下来,我们将详细介绍这些书籍所涵盖的知识点以及它们对Java学习的重要性。 ### 第一本书:《Java核心技术》 #### 知识点概述 - **...
《阿里巴巴Java开发手册》是阿里巴巴集团内部制定的一套Java编程规范,旨在提升代码质量和团队协作效率。手册的更新至2017.11.30的版本,内容与上市的实体书相差无几,因此这里我们将依据这个版本探讨一些核心的Java...
《Effective Java》是一本经典且深受程序员喜爱的书籍,由Joshua Bloch撰写,中文版为《EFFECT JAVA 中文》。这本书深入探讨了Java编程的最佳实践和常见陷阱,旨在帮助开发者写出更高效、可维护的代码。书中分为多个...
《Effective Java》是由Joshua Bloch编写的,他是一位经验丰富的Java开发者,也是Java平台的关键设计师之一。这本书分为多个条目,每个条目都详细介绍了如何编写更高效、更可靠和更易于维护的Java代码。以下是这两...
- **电子书籍**: 《Java核心技术卷Ⅰ:基础知识》、《Java核心技术卷Ⅱ:高级特性》、《Effective Java》等都是Java学习的经典书籍。 - **视频教程**: 雷迅快传分享的资源链接提供了大量Java实战项目的视频教程,...
此外,书中还涉及了新“TR1”标准库功能的应用以及与其他语言(如Java、C#、C)之间的差异分析,帮助开发者更好地理解和掌握C++的特性和编程方式。 #### 四、新增内容与更新 在第三版中,超过一半的内容都是全新的...
随着对Java的理解加深,可以阅读《Effective Java》(第3版)。作者Joshua Bloch深入剖析了如何编写高质量的Java代码,其中包含了大量实用的编程技巧和最佳实践。这本书对于提升代码质量有着极大的帮助。 进一步...
- 第三方指南:如Effective Java、Head First Java等书籍,提供了深入理解和实践的指导。 - 在线教程:如Stack Overflow、Java Tutorials等网站,提供问题解答和学习路径。 3. **项目**: - 学习示例:小型项目...
- 推荐资源:《Effective Java》第三版详细介绍了如何有效地使用Java的新特性。 2. **数据库基础**: - 在实际项目开发中,数据库操作是一项非常重要的技能。虽然可以先学习Oracle,但MySQL因其易用性和普及率较...
标题“机器学习资源整理002不全”和描述中的“机器学习资源整理002不全-math_deep.effective-java”暗示了这份压缩包包含了关于机器学习和Java编程的资料,特别是数学基础和《Effective Java》这本书的相关内容。...
这是Joshua Bloch在《Effective Java》中推荐的方式,既简单又线程安全。 ```java public enum Singleton { INSTANCE; public void whateverMethod() { } } ``` 在Android开发中,单例模式常用于如网络请求...
从给定的文件信息来看,我们讨论的核心是《Effective Java》一书,这是一本针对Java编程语言的深度指南,由美国计算机科学家Joshua Bloch撰写,中文版由潘爱民翻译。本书作为Sun公司核心技术丛书中的一员,以其独特...
- **内容简介**:这本书是学习Java的重要参考书之一,通过丰富的示例帮助读者理解面向对象的设计思想。 - **关键知识点**: - Java语言的核心概念与设计模式。 - 高级编程技术,如泛型、注解等。 - 软件工程原则...
- 覆盖了Java语言的基础语法和高级特性,如操作符、控制执行流程、访问权限控制、复用类、多态、接口、异常处理、字符串、泛型、数组、容器深入研究、Java I/O系统、枚举类型、并发以及图形化用户界面等内容;...