C++类里面的enumjava枚举类型enum定义为什么不占内存

问题的提出所谓单个写入程序/多個阅读

讲诉python爬虫的20个案例 。。。。。。。。。。。。。。。。

学过C/C++等语言的人应该都对Enumjava枚举類型enum定义略知一二。Enum一般用来表示一组相同java枚举类型enum定义的常量如性别、日期、月份、颜色等。对这些属性用常量的好处是显而易见的不仅可以保证单例,且比较时候可以用”==”来替换equals是一种好的习惯。JDK1.5之前没有Enum这个java枚举类型enum定义那时候一般用接口常量来替代。有叻JavaEnum之后可以更贴近的表示这种常量。

简单的用法:JavaEnum简单的用法一般用于代表一组常用常量可用来代表一类相同java枚举类型enum定义的常量值。如:

枚举对象里面的值都必须是唯一的

复杂用法:Java为枚举java枚举类型enum定义提供了一些内置的方法,同事枚举常量还可以有自己的方法鈳以很方便的遍历枚举对象,看个下面的例子:

Java Enumjava枚举类型enum定义的语法结构尽管和java类的语法不一样应该说差别比较大。但是经过编译器编譯之后产生的是一个class文件该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum<E>.

所以实际上Enumjava枚举类型enum定义就是以Java类来实现的沒有什么新的特点,只不过java编译器帮我们做了语法的解析和编译完全也可以自己实现。但是既然有这样方便一个东西当然会去用了。

1.1》:以类为实例:

2》:以Enum定义的

给 enum 自定义属性和方法

从反编译的玳码来看我们定义的枚举,编译器会将其转换成一个类这个类继承自java.lang.Enum类,除此之外编译器还会帮我们生成多个枚举类的实例,赋值給我们定义的枚举java枚举类型enum定义常量并且还声明了一个枚举对象的数组,保存了所有的枚举对象下面我们分别来计算一下采用静态变量和枚举占用内存的大小。

int占用内存大小为4加起来占用内存大小为8

首先我们看一下枚举对象占用的内存大小

其中12个字节是对象头占用的內存,Enum中包含了一个Stringjava枚举类型enum定义的对象空字符串对象本身就是32 字节,加上其中的字符数组最少也会占据 24 个字节, 对字符串加字符数组最尐会占据 56 个字节故一个 Enum 实例,最少 56+24 = 80个字节在加上字符串"MAN",“WOMAN”占用的空间两个枚举对象占用的空间大小为:

可以看到,枚举占用内存的大小比静态变量多得多

三、枚举的替代方案(2种方式

接口变量默认都是public static final的,个人理解接口只是对一类事物的属性和行为更高层次的抽潒对修改关闭,对扩展(不同的实现implements)开放接口是对开闭原则的一种体现。

一般情况下我们可以使用注解来替代枚举,用法如下:

我要回帖

更多关于 java枚举类型enum定义 的文章

 

随机推荐