java枚举编译后是什么样子?
在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枚举编译后是什么样子?相关推荐
- java源程序是由类定义_无论Java源程序包含几个类的定义,若该源程序文件以A.java命名,编译后生成的都只有一个名为A的字节码文件...
无论Java源程序包含几个类的定义,若该源程序文件以A.java命名,编译后生成的都只有一个名为A的字节码文件 答:× 小儿头皮静脉输液时如误注入动脉,局部表现为: 答:呈树枝状苍白 人民群众既是历史 ...
- 包含内部类的.java文件编译后生成几个.class文件
如果一个类有内部类,编译将生成几个字节码文件,规则是怎样呢? 写在前,自己动手丰衣足食,结论只有个人实验支持,没有官方数据支持,欢迎自行查阅文档然后来指正,轻喷,谢谢. 1.普通类包含内部类的样例 p ...
- 初学java遇到编译后执行出现乱码如何解决
初学java: 在Windows中遇到编译后执行CMD出现乱码如何解决? 对于初学者,编写好源代码,在编译执行后会出现中文乱码该如何解决? 示例:(下图)可以看出,在命令窗口中执行java后出现了中文 ...
- java数组编译后_Java中数组和集合的foreach操作编译后究竟是啥
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 今天和同事在关于 ...
- java编译后生成字节码_请问java源文件编译后怎么生成字节码文件?
比如,有的java源程序生成一个字节码文件,带有内部类的生成两个.可是有一种情况怎么回事呢?importjava.awt.*;importjavax.swing.*;importjava.awt.ev ...
- Java程序编译后的扩展名_一个Java源程序经过编译后,得到的文件扩展名一定是.class。...
关于消防疏散说法错误的是() 所有成熟蛋白质都含有S元素.(5.0分) A: catch the first bus yesterday morning? B: No, I couldn't. 245 ...
- 在eclipse里jsp编译后的java和class文件的位置
eclipse版本不一样,位置也不一样 第一种:(网上搜到的) 1.java类编译后产生的.class文件在D:\workspace\test\WEB-INF\classes下; 2.jsp产生 ...
- java的编译及运行
2019独角兽企业重金招聘Python工程师标准>>> Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: ...
- “Java是编译执行的语言”这句话对吗?
现在让你谈谈对Java平台的理解,你是否会感觉内容过于庞大?这个问题是比较宽泛的,Java发展到现在已经不仅仅是语言这么简单了,Java平台涉及的,包括但不仅限于下面提到的这些内容: Java语言本身 ...
最新文章
- pi数据库系统中国服务器,基于PI数据库的服务器实时监控系统研究与开发
- 收费标准_互联网推广收费标准
- android中调用fft函数,J使用PCM数据在Android中转换FFT(JTransforms FFT in Android from PCM data)...
- oracle主机名的脚本,一个开启Oracle服务和更改主机名的脚本-Oracle
- CVPR2018 目标检测算法总览(最新的目标检测论文)
- [Codeforces677B]Vanya and Food Processor(模拟,数学)
- 【Vue】前端跨域解决方法
- STVP烧录失败提示“cannot communicate with tool”或者“The device is protected”
- 658.一元二次方程公式
- python 对 excel 进行合并与去重操作
- 用matlab画阻尼振动包络线,matlab阻尼振动模拟.doc
- 【编程题】【Scratch四级】2022.03 早餐组合
- 腾讯地图标记点击事件
- 永远不要在MySQL中使用UTF-8
- javaSE进阶学习笔记
- [予纯 · 星火 - 1] 女生用品与物理化学
- Android 百度地图开发 全景图SDK的使用
- 股票k线黄昏之星怎么看?黄昏之星k线图分析
- html添加实时视频的代码,关于添加网页视频的html代码
- 西门子atch指令详解_中文详解西门子PLC指令,瞬间都明白了!