`

了解枚举

    博客分类:
  • java
阅读更多
为了了解枚举,先利用反射分析一下它
import java.lang.reflect.*;

//定义枚举
enum Car {
FORD,NISSION,BMW
}

public class EnumAnalyze {

public static void main(String[] args) {
System.out.println("Superclass:");
System.out.println(Car.class.getGenericSuperclass());
System.out.println("Interfaces:");
for (Type t : Car.class.getGenericInterfaces())
System.out.println(t);
System.out.println("Fields:");
for (Field f : Car.class.getFields())
System.out.println(f);
System.out.println("Methods:");
for (Method m : Car.class.getDeclaredMethods())
System.out.println(m);
}

}
/*输出如下
Superclass:
java.lang.Enum<Car>
Interfaces:
Fields:
public static final Car Car.FORD
public static final Car Car.NISSION
public static final Car Car.BMW
Methods:
public static Car[] Car.values()
public static Car Car.valueOf(java.lang.String)
*/

通过上面的输出,可以推出枚举代码(当然也可以通过使用javap反编译enum Car)
下面的代码可以让我们很清楚地了解枚举

final class Car extends java.lang.Enum {
public static final Car FORD;
public static final Car NISSION;
public static final Car BMW;
public static Car[] values();
public static Car valueOf(java.lang.String);
}

上面values()和valueOf(java.lang.String)方法是由编译器添加的,再分析一下java.lang.Enum类确定这两个方法不是Enum类的方法

import java.lang.reflect.*;

public class EnumAnalyze {

public static void main(String[] args) {
for (Method m : java.lang.Enum.class.getDeclaredMethods())
System.out.println(m);
}

}
/*输出如下
public final java.lang.String java.lang.Enum.name()
protected final void java.lang.Enum.finalize()
public final boolean java.lang.Enum.equals(java.lang.Object)
public java.lang.String java.lang.Enum.toString()
public final int java.lang.Enum.hashCode()
protected final java.lang.Object java.lang.Enum.clone() throws java.lang.CloneNotSupportedException
public final int java.lang.Enum.compareTo(java.lang.Enum)
public int java.lang.Enum.compareTo(java.lang.Object)
public static java.lang.Enum java.lang.Enum.valueOf(java.lang.Class,java.lang.String)
public final java.lang.Class java.lang.Enum.getDeclaringClass()
private void java.lang.Enum.readObject(java.io.ObjectInputStream) throws java.io.IOException,java.lang.ClassNotFoundException
public final int java.lang.Enum.ordinal()
private void java.lang.Enum.readObjectNoData() throws java.io.ObjectStreamException
*/

枚举可以有自己的属性和方法(也可以把main方法写在Car里面),还可以实现多态
enum Car {
FORD,NISSION,BMW;
int door;
static int wheel;
final void run() {
System.out.println(this.name() + " is running.");
}
}
public class EnumAnalyze {

public static void main(String[] args) {
Car.FORD.door = 2;
System.out.println(Car.BMW.door);
Car.FORD.wheel = 4;
System.out.println(Car.BMW.wheel);
for (Car c : Car.values())
c.run();
}

}
/*输出如下
0
4
FORD is running.
NISSION is running.
BMW is running.
*/

定义构造器(注意构造器要用private修饰符)
enum Car {
FORD,NISSION(4),BMW(2);

private Car() {}
private Car(int door) {
this.door = door;
}

private int door;
public int getDoor() {
return door;
}
}
public class EnumAnalyze {

public static void main(String[] args) {
System.out.println(Car.FORD.getDoor());
System.out.println(Car.NISSION.getDoor());
System.out.println(Car.BMW.getDoor());
}

}
/*输出如下
0
4
2
*/

枚举还可以重写方法
enum Car {
FORD ,
NISSION,
BMW {
void stop() {System.out.println("Override method");}
};

void stop() {
System.out.println("Default method");
}
}
public class EnumAnalyze {

public static void main(String[] args) {
Car.FORD.stop();
Car.NISSION.stop();
Car.BMW.stop();
}

}
/*输出如下
Default method
Default method
Override method
*/

再介绍枚举的几个常用方法
values() //返回所有枚举
name() //返回枚举名
toString() //返回枚举名
ordinal() //返回枚举的位置,从0开始
equals(Enum) //判断是否是同一个枚举
compareTo() //返回枚举的位置差距
valueOf(String) //返回指定的枚举,如果不存在指定的枚举则抛java.lang.IllegalArgumentException异常
valueOf(Class, String) //返回指定枚举类中指定的枚举,如果不存在指定的枚举则抛java.lang.IllegalArgumentException异常
分享到:
评论

相关推荐

    谈谈你可能并不了解的java枚举

    虽然初学者通常只接触基础用法,但深入了解枚举的内在机制和高级特性可以提升代码的质量和可维护性。本文将深入探讨Java枚举的一些鲜为人知的特性。 1. 枚举默认值与自定义值: Java枚举的默认值是从0开始的整数...

    易语言枚举MTP设备

    5. **界面显示**:为了让用户能够直观了解枚举结果,源码通常会集成到一个图形用户界面(GUI)中,将设备信息展示在列表框或其他控件上。 6. **设备操作**:用户可能需要对枚举出的MTP设备进行进一步操作,如浏览...

    枚举类型定义与变量声明定义的不同方法

    首先,让我们了解枚举的基本概念。枚举类型允许我们为一组相关的整数值赋予易于理解的标识符,这样在代码中使用这些标识符会更加清晰易读。在C++中,枚举的定义语法如下: ```cpp enum 枚举名 { 常量名1 = 值1, ...

    易语言源码易语言枚举托盘图标源码.rar

    总结来说,这个压缩包提供了一个很好的学习平台,让易语言初学者能够了解枚举托盘图标的实现方式,同时也为有经验的开发者提供了进一步深入研究易语言和Windows API的机会。通过阅读源码、理解和实践,可以提升编程...

    枚举大小sizeof中枚举的大小详解.pdf

    在C++编程语言中,枚举(`enum`)是一种用户自定义...了解枚举的内存占用、类型转换规则以及与整型的差异,对于编写高效且无错的C++代码至关重要。在使用枚举时,应当注意潜在的类型转换风险,并充分理解编译器的行为。

    USB枚举 SetAddress问题…

    - 仔细阅读USB协议标准,了解枚举过程中的每一步具体行为。 - 使用串口或其他方式输出调试信息时,要确保不会因为调试信息输出而影响设备的关键操作。 - 在程序中设置时间点,记录和分析设备在哪些阶段出现延迟,...

    枚举系统中已经安装的所有硬件设备.rar_枚举 设备_枚举所有设备

    通过阅读这些文件,开发者可以更深入地了解枚举设备的过程,学习如何在实际项目中应用这些技术。 总之,枚举系统中已安装的所有硬件设备是系统管理和设备驱动编程的关键环节,它涉及多个Windows API的使用,理解和...

    易语言枚举win7网络连接

    首先,我们要了解枚举在网络连接中的含义。在编程中,枚举(Enumeration)通常用于定义一组具有命名常量的集合。在网络连接的上下文中,枚举是指遍历并获取系统中所有可用的网络连接状态、名称、IP地址等相关信息。 ...

    易语言源码易语言API枚举进程内模块源码.rar

    同时,了解枚举进程内模块的方法,也有助于进行进程间通信、动态注入等功能的开发。 总结来说,"易语言API枚举进程内模块源码"提供了易语言环境下实现进程模块枚举的实例,有助于开发者掌握系统级编程技巧,尤其是...

    统一获取枚举字典统一获取枚举字典

    首先,让我们了解枚举的基本用法。在Java中,我们可以通过以下方式定义一个枚举: ```java public enum Color { RED, GREEN, BLUE } ``` 在这个例子中,`Color`枚举包含三个成员:`RED`、`GREEN`和`BLUE`。 为了...

    用查询方式来学习枚举过程

    ### 用查询方式学习USB枚举过程的关键...通过上述步骤,我们能够清晰地了解枚举过程中的基本交互机制。这种基于查询方式的学习方法不仅有助于理解USB通信的基本原理,而且还能为进一步深入研究USB编程打下坚实的基础。

    枚举算法教学设计.pdf

    本教学设计的主要目标是让高一上学期的信息技术根底学生熟悉用枚举算法设计程序的根本思路,学会使用枚举算法解决现实生活、学习中所遇到的问题,并了解枚举算法的局限性。 一、教学目标 * 知识与技能目标:熟悉用...

    枚举java基础知识点

    枚举Java基础知识点 Java中的枚举(Enumeration)是一种特殊的数据类型,它可以将一组固定的常量分组到一个枚举类型中,使得代码更加简洁、易读和维护。...了解枚举的用法是Java编程的基础知识点。

    基础算法枚举贪心分治策略PPT课件.pptx

    "基础算法枚举贪心分治策略PPT课件" 枚举策略是算法设计中的一个基本思想,指在一个有穷的可能解的...通过本PPT课件的学习,读者可以了解枚举策略的基本思想和优化方法,并掌握如何将枚举策略应用于实际问题的解决中。

    枚举算法教学设计.doc

    本教学设计旨在让学生深入了解枚举算法的基本概念、运用方法及其局限性,培养他们的逻辑思维能力和解决问题的能力。 首先,教学目标分为知识与技能目标、过程与方法、情感态度与价值观三个层面。知识与技能目标要求...

    易语言枚举窗口

    首先,我们需要了解枚举窗口的基本步骤: 1. 引入API:在易语言中,我们需要声明并引入`EnumWindows`函数,以及可能需要的其他API,如`GetWindowText`用于获取窗口标题,`IsWindowVisible`判断窗口是否可见等。 2. ...

    2022《C语言程序设计上机指导》项目八枚举与位运算精选ppt.pptx

    "2022《C语言程序设计上机指导》项目八枚举与位运算精选ppt" 本资源是关于C语言程序设计的上机指导...本资源为C语言程序设计的上机指导项目,旨在帮助学生了解枚举和位运算的知识点,并通过实验和思考题来加深理解。

    易语言源码易语言枚举收藏夹源码.rar

    了解枚举在易语言中的使用方法,包括如何定义枚举类型,如何使用枚举值,将有助于理解和修改代码。 3. **文件系统操作** 收藏夹通常涉及到文件或文件夹的管理,因此源码中很可能包含了读取、遍历文件系统,获取...

    Swift视频教程 枚举的定义和语法

    Swift是一种强大的、安全的编程语言,由Apple公司开发并用于构建iOS、macOS、watchOS以及tvOS等...通过观看"Swift视频教程 基础语法系列 枚举的定义和语法",你将能够深入了解枚举的各种用法,并将其应用于实际开发中。

    易语言枚举任务栏窗口标题.7z

    首先,我们需要了解枚举的概念。在编程中,枚举(Enumeration)通常是指遍历或列举出某一范围内所有可能的值。在Windows操作系统中,枚举窗口可以理解为遍历系统中所有的活跃窗口,并获取它们的相关信息,如窗口标题...

Global site tag (gtag.js) - Google Analytics