`
ZangXT
  • 浏览: 118319 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

看一下enum的原理

阅读更多

      java5增加了enum,其实对enum的处理很简单,编译器增加了一些功能而以。
看代码:

  1. public enum Season{
  2. Spring,Summer,Autumn,Winter
  3. }

javap -c Season
就可以看出来具体的处理了,不过直接反编译更容易理解,使用jad处理的结果。

  1. //Decompiled by Jad v1.5.8g.Copyright2001 Pavel Kouznetsov.
  2. //Jadhomepage:http://www.kpdus.com/jad.html
  3. //Decompiler options:packimports(3)
  4. //SourceFileName:Season.java
  5. public final class Season extends Enum
  6. {
  7. public static final Season[] values()
  8. {
  9. return(Season[])$VALUES.clone();
  10. }
  11. public static Season valueOf(Strings)
  12. {
  13. return (Season)Enum.valueOf(Season,s);
  14. }
  15. private Season(String s,int i)
  16. {
  17. super(s,i);
  18. }
  19. public static final Season Spring;
  20. public static final Season Summer;
  21. public static final Season Autumn;
  22. public static final Season Winter;
  23. private static final Season $VALUES[];
  24. static
  25. {
  26. Spring=new Season("Spring",0);
  27. Summer=new Season("Summer",1);
  28. Autumn=new Season("Autumn",2);
  29. Winter=new Season("Winter",3);
  30. $VALUES=(new Season[]{
  31. Spring,Summer,Autumn,Winter
  32. });
  33. }
  34. }


一个从java.lang.Enum<E>继承下来的final类,没有什么特殊的地方。使用的时候
Season season = Season.Spring;
不过就是直接访问了Season类中定义的静态常量Spring而已。

其实从java 5开始加入的一些新的语法特性,都是编译器增加了处理,而对于jvm而言,基本不需要什么变化。

分享到:
评论

相关推荐

    DNS,ENUM原理介绍

    简单介绍了DNS和ENUM的原理及在IMS网络中的使用

    enum 结构分析源码

    首先,我们来看`enum.c`这个源文件。在C语言中,枚举的声明语法如下: ```c enum Identifier { Constant1, Constant2, ... }; ``` 这里的`Identifier`是枚举类型的名称,`Constant1`, `Constant2`等是枚举常量...

    WPF 中一组 RadioButton 向 Enum 的绑定

    首先,让我们理解RadioButton的基本工作原理。RadioButton控件用于在一系列互斥的选项中让用户做出单选。在WPF中,RadioButton通常通过IsChecked属性与其他RadioButton进行分组,并通过GroupName属性确保同一组内的...

    DNS-ENUM.rar_ENUM/DNS_dns _enum 域名解析

    `DNS-ENUM.rar_ENUM/DNS_dns_enum 域名解析`这个压缩包文件包含了关于DNS枚举和域名解析的相关工具或代码实现,这通常涉及到网络安全分析、漏洞检测或网络监控等领域。 1. **DNS枚举**: DNS枚举是一种网络安全...

    cpp-BetterEnums编译时期枚举库拥有干净的语法只有一个头文件没有依赖性

    首先,让我们深入理解一下Better Enums的核心概念。在标准C++中,枚举(enum)是一种定义常量集合的方式,但它们有一些限制,如类型安全不足、缺少自定义操作和表达式支持等。Better Enums通过提供一种更强大的枚举...

    cplusplus_enum_regedit

    根据提供的信息,我们可以详细解析如何使用C++来枚举...通过理解注册表的基本概念以及上述API函数的工作原理,可以轻松实现这一目标。此外,本文还提供了一个具体的实现示例,可以帮助开发者更好地理解和应用这些技术。

    enum_func.zip_FRIDA_frida hook_hook enum_安卓hook

    1. **Frida原理**:Frida工作于进程注入模式,它能够将自身注入到目标进程中,然后通过JavaScript来实现对目标进程的代码插桩。JavaScript代码在目标进程中运行,可以直接操作内存、API调用等,提供极高的灵活性。 ...

    7enum枚举字函数程序案例VC共4页.pdf.zip

    10. **学习与实践**: 通过这个案例,学习者不仅可以了解到枚举字函数的原理和使用,还能锻炼实际编程技能,将理论知识应用到实际项目中,增强解决实际问题的能力。 总结:这个压缩包中的PDF文档提供了一个使用VC++...

    Java中的Enum枚举用法.doc

    4. **枚举的原理:** - 枚举类型在编译后会被转换成一个特殊的类,该类继承自`java.lang.Enum`。 - 枚举中的每个元素实际上都是该类的一个实例,并且是静态和final的。 - 编译后的枚举类类似于以下结构: ```...

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

    3. **枚举的底层原理**: 当编译器遇到枚举类型时,会自动为每个枚举常量创建一个私有的构造函数,并在类的静态初始化块中创建实例。这些实例存储在静态字段中,确保它们在类加载时创建,因此枚举对象是线程安全的...

    Enum ,file

    在编程领域,枚举(Enum)是一种特殊的数据类型,它允许我们定义一组相关的常量,这些常量可以作为变量的值。...在现代C++中,虽然有更高级的库(如C++标准库的`&lt;filesystem&gt;`),但理解这些基本原理仍然是有价值的。

    Struct And Enums结构和枚举

    在编程领域,结构(Struct)和枚举(Enum)是两种...在VS2005环境下,你可以方便地调试和测试这些示例,加深对这两种数据类型工作原理的理解。通过不断练习和探索,你将能够灵活运用Struct和Enums解决实际编程问题。

    哈工大-编译原理-习题及答案汇总.pdf

    C 语言的关键字有:auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、sizeof、static、struct、switch、...

    编译原理 厦大 实验一

    2. 定义关键字数组:char *keyword[34]={"auto","break","case","char","const","continue","default","do","double", "else","enum","extern","float","for","goto","if","int","long","register", "return","short...

    编译原理_计算器_C++实现

    在这个实现中,我们还使用了 enum 类型来定义 Token 类型,然后使用 switch 语句来进行 Token 的分类和处理。此外,我们还使用了 namespace std; 来访问 standard 库中的函数和变量。 在这个 C++ 实现中,我们使用...

    编译原理PL0源码(C语言版)

    编译原理PL0源码(C语言版) /*** PL0 COMPILER WITH CODE GENERATION ***/ //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //----...

    西北工业大学版(蒋立源第三版)编译原理课后习题答案

    C语言的关键字有auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、sizeof、static、struct、switch、...

Global site tag (gtag.js) - Google Analytics