深入java虚拟机——enum本质
来源:互联网 发布:sql server 许可证 编辑:程序博客网 时间:2024/05/01 15:28
自从看了java虚拟机,就一直想对java的一些特性进行更深入的了解。想弄清楚这些特性在虚拟机的层面到底是怎么实现的。通过自定义一个enum类型,然后查看编译后的class文件。发现了如下几件事情。
1.自定义一个enum类型本质上定义了一个java.lang.Enum的一个子类。如以下代码:
与public enum Color {RED,GREEN}等价的类为public class Color extends Enum<Color >{
public static final Color RED=new Color("RED",0);
public static final Color GREEN=new Color("GREEN",1);
public Color(String name,int ordinal){
super(name,ordinal);
}
}
2.是用enum定义一个类型时,就是定义了一个继承了java.lang.Enum的一个子类,一个Enum实例内部有两个属性,name和ordinal,一个构造方法 Enum(String name,int ordinal);Enum的toString方法返回的即name属性。所以 System.out.println(Color.RED);打印“RED”就不足为奇了。
3.如果我们在enum要定义若干常量列表(其实是必然的,我们定义enum类型的目的正在于此),比如上面的RED、GREEN,必须放在类开始处,也就是说如下的形式是不合法的。
public enum Color {
some code//some code为一些方法或者字段定义。
RED,GREEN}
4.编译器会为我们自定义的enum类型生成两个方法。其中一个方法如下:
public static Color valueOf(String name);//根据name得到对应的Color对象,比如传入"RED",返回RED
5.既然enum本质是一个class,自然可以任意定义属性和方法了,不过我们一般没有这么做的必要。同时这个class有其特殊之处,
比如构造方法不能有访问修饰符(其实编译为其自动生成私有访问属性)
1.自定义一个enum类型本质上定义了一个java.lang.Enum的一个子类。如以下代码:
与public enum Color {RED,GREEN}等价的类为public class Color extends Enum<Color >{
public static final Color RED=new Color("RED",0);
public static final Color GREEN=new Color("GREEN",1);
public Color(String name,int ordinal){
super(name,ordinal);
}
}
2.是用enum定义一个类型时,就是定义了一个继承了java.lang.Enum的一个子类,一个Enum实例内部有两个属性,name和ordinal,一个构造方法 Enum(String name,int ordinal);Enum的toString方法返回的即name属性。所以 System.out.println(Color.RED);打印“RED”就不足为奇了。
3.如果我们在enum要定义若干常量列表(其实是必然的,我们定义enum类型的目的正在于此),比如上面的RED、GREEN,必须放在类开始处,也就是说如下的形式是不合法的。
public enum Color {
some code//some code为一些方法或者字段定义。
RED,GREEN}
4.编译器会为我们自定义的enum类型生成两个方法。其中一个方法如下:
public static Color valueOf(String name);//根据name得到对应的Color对象,比如传入"RED",返回RED
5.既然enum本质是一个class,自然可以任意定义属性和方法了,不过我们一般没有这么做的必要。同时这个class有其特殊之处,
比如构造方法不能有访问修饰符(其实编译为其自动生成私有访问属性)
- 深入java虚拟机——enum本质
- Java中enum的本质
- Java 虚拟机本质
- java enum深入解析
- 深入java虚拟机——多线程
- 读书笔记——深入理解java虚拟机
- 深入理解java虚拟机—编译
- 深入理解Java虚拟机——虚拟机执行子系统
- 深入理解Java虚拟机——虚拟机加载机制
- 深入理解Java虚拟机——HotSpot虚拟机对象探秘
- 虚拟机类加载机制——深入理解Java虚拟机
- 虚拟机内存管理—深入理解Java虚拟机(三)
- 深入理解java虚拟机—虚拟机类加载机制
- 深入理解java虚拟机—虚拟机字节码执行引擎
- java——enum
- java Enum类深入研究
- 深入理解java虚拟机——java内存区域
- 深入Java虚拟机(1)——Java体系结构
- ORACLE 备份还原
- 副作用与序列点
- 关于vc dll接口
- 想学编程?这样开始
- 约战计算机——战术分析
- 深入java虚拟机——enum本质
- windows下连接不上虚拟机中的ubuntu解决方案
- Martin Casado:Nicira为什么要抛弃OpenFlow硬件控制
- 关于飞线
- XCode4如何解决调试程序时,忽然崩溃,而找不到崩溃的代码
- vsftpd 被动模式与主动模式
- OpenERP —— 下一代ERP
- RESOURCES = spreadsheet.qrc
- hibernate实体字段查出组装map