在java中,我们经常使用枚举来表示有限值的集合。

像下面的这个枚举类:

public enum Level {HIGH,MIDDLE,LOW;
}

那么,枚举类编译之后,是个什么样子呢?

在JDK1.8.0_152环境下,我们使用javac编译这个枚举类,得到Level.class字节码文件。

利用javap我们反编译Level.class字节码文件,看看能发现什么?

可以看到,枚举实际上是一个java类,并且是一个final class,这也符合枚举不可以被继承的特点。

同时Level继承了java.lang.Enum类。java是单继承的,这意味着枚举enum不可以继承其他类了。

同时我们看看HIGH、MIDDLE、LOW都被final修饰,以维护不可变性。并且是公开的,这也意味着,可以直接访问它们。

每个java类,如果没有声明构造函数,那么javac会自动为类增加一个默认的公开的无参构造函数,这里我们没有看见构造函数。

难道构造函数被javac声明成private的了?

我们使用javap -p 来看看Level.class中的私有方法和域:

注意红线部分,我们看到了,Level的构造函数被声明为private的,这也意味着用户不可以实例化枚举类Level。

【总结】:enum本质是个继承java.lang.Enum类的final class

【问题】:static{}块是用来干什么的?HIGH,MIDDLE,LOW又是如何初始化的? values()方法是哪儿来的?

java枚举编译后是什么样子?相关推荐

  1. java源程序是由类定义_无论Java源程序包含几个类的定义,若该源程序文件以A.java命名,编译后生成的都只有一个名为A的字节码文件...

    无论Java源程序包含几个类的定义,若该源程序文件以A.java命名,编译后生成的都只有一个名为A的字节码文件 答:× 小儿头皮静脉输液时如误注入动脉,局部表现为: 答:呈树枝状苍白 人民群众既是历史 ...

  2. 包含内部类的.java文件编译后生成几个.class文件

    如果一个类有内部类,编译将生成几个字节码文件,规则是怎样呢? 写在前,自己动手丰衣足食,结论只有个人实验支持,没有官方数据支持,欢迎自行查阅文档然后来指正,轻喷,谢谢. 1.普通类包含内部类的样例 p ...

  3. 初学java遇到编译后执行出现乱码如何解决

    初学java: 在Windows中遇到编译后执行CMD出现乱码如何解决? 对于初学者,编写好源代码,在编译执行后会出现中文乱码该如何解决? 示例:(下图)可以看出,在命令窗口中执行java后出现了中文 ...

  4. java数组编译后_Java中数组和集合的foreach操作编译后究竟是啥

    [本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 今天和同事在关于 ...

  5. java编译后生成字节码_请问java源文件编译后怎么生成字节码文件?

    比如,有的java源程序生成一个字节码文件,带有内部类的生成两个.可是有一种情况怎么回事呢?importjava.awt.*;importjavax.swing.*;importjava.awt.ev ...

  6. Java程序编译后的扩展名_一个Java源程序经过编译后,得到的文件扩展名一定是.class。...

    关于消防疏散说法错误的是() 所有成熟蛋白质都含有S元素.(5.0分) A: catch the first bus yesterday morning? B: No, I couldn't. 245 ...

  7. 在eclipse里jsp编译后的java和class文件的位置

    eclipse版本不一样,位置也不一样  第一种:(网上搜到的)  1.java类编译后产生的.class文件在D:\workspace\test\WEB-INF\classes下;  2.jsp产生 ...

  8. java的编译及运行

    2019独角兽企业重金招聘Python工程师标准>>> Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: ...

  9. “Java是编译执行的语言”这句话对吗?

    现在让你谈谈对Java平台的理解,你是否会感觉内容过于庞大?这个问题是比较宽泛的,Java发展到现在已经不仅仅是语言这么简单了,Java平台涉及的,包括但不仅限于下面提到的这些内容: Java语言本身 ...

最新文章

  1. pi数据库系统中国服务器,基于PI数据库的服务器实时监控系统研究与开发
  2. 收费标准_互联网推广收费标准
  3. android中调用fft函数,J使用PCM数据在Android中转换FFT(JTransforms FFT in Android from PCM data)...
  4. oracle主机名的脚本,一个开启Oracle服务和更改主机名的脚本-Oracle
  5. CVPR2018 目标检测算法总览(最新的目标检测论文)
  6. [Codeforces677B]Vanya and Food Processor(模拟,数学)
  7. 【Vue】前端跨域解决方法
  8. STVP烧录失败提示“cannot communicate with tool”或者“The device is protected”
  9. 658.一元二次方程公式
  10. python 对 excel 进行合并与去重操作
  11. 用matlab画阻尼振动包络线,matlab阻尼振动模拟.doc
  12. 【编程题】【Scratch四级】2022.03 早餐组合
  13. 腾讯地图标记点击事件
  14. 永远不要在MySQL中使用UTF-8
  15. javaSE进阶学习笔记
  16. [予纯 · 星火 - 1] 女生用品与物理化学
  17. Android 百度地图开发 全景图SDK的使用
  18. 股票k线黄昏之星怎么看?黄昏之星k线图分析
  19. html添加实时视频的代码,关于添加网页视频的html代码
  20. 西门子atch指令详解_中文详解西门子PLC指令,瞬间都明白了!

热门文章

  1. 大狼痛心疾首的碎碎念
  2. H710 RAID卡的直通
  3. 微信小程序详情页跳转
  4. Unity-URP学习笔记(三)赛璐珞阴影
  5. 微信小游戏|开放数据域的写与读
  6. python预测糖尿病_使用决策树与随机深林预测糖尿病(python)
  7. 不相关、独立、正交的区别与联系
  8. 神经网络学习----如何利用训练好的神经网络模型进行预测
  9. 我应该如何在CSDN问答提问?
  10. FPGA双口RAM使用