深入java 通过反编译看枚举用法
2017-09-14 16:53
204 查看
这篇文章总结java1.5后jdk中新加的一种类型:enum。更多的源代码请访问我的github:https://github.com/yangsheng20080808/deepIntoJava
本文分为2大部分
反编译看枚举怎么用
其实枚举用法很简单
我们将源代码先编译,然后反编译可以看到(解语法糖之后):
很显然:enum Sex是一个final类,所以Sex无法被继承。同时反编译的代码让我们发现,枚举类其实已经继承Enum,java是不允许多继承的,所以enum Sex是封闭的,(枚举类)既不可以继承,也不可以被继承,但是可以使用接口。
还有一点要注意:枚举类的构造函数必须是private,为什么呀?
因为枚举类是线程安全的,我们可以从反编译的代码里面看到其实枚举类用到的是静态方法来获取自己的final常量类对象,我们不需要也无法自己创建它的实例,因为JVM在加载这一个枚举类的时候,我们声明的所有枚举都已经被实例化了。,到这里:我们又得出一个结论:枚举类无法手动实例化。
但是假如我们想要自己继承Enum类,很可惜:
编译器也不会允许我们这样。
其实就是调用自身内部的final静态类对象:
运行结果:
本文分为2大部分
反编译看枚举怎么用
其实枚举用法很简单
反编译看枚举怎么用
枚举是基于泛型实现的,枚举是什么,其实枚举就是一个普通的类:enum是一个语法糖,Enum是对应的类:我们将源代码先编译,然后反编译可以看到(解语法糖之后):
很显然:enum Sex是一个final类,所以Sex无法被继承。同时反编译的代码让我们发现,枚举类其实已经继承Enum,java是不允许多继承的,所以enum Sex是封闭的,(枚举类)既不可以继承,也不可以被继承,但是可以使用接口。
还有一点要注意:枚举类的构造函数必须是private,为什么呀?
因为枚举类是线程安全的,我们可以从反编译的代码里面看到其实枚举类用到的是静态方法来获取自己的final常量类对象,我们不需要也无法自己创建它的实例,因为JVM在加载这一个枚举类的时候,我们声明的所有枚举都已经被实例化了。,到这里:我们又得出一个结论:枚举类无法手动实例化。
但是假如我们想要自己继承Enum类,很可惜:
编译器也不会允许我们这样。
其实枚举用法很简单
其实枚举的用法很简单:其实就是调用自身内部的final静态类对象:
运行结果:
相关文章推荐
- 通过反编译字节码来理解 Java 枚举
- 通过反编译深入理解Java String及intern
- 通过反编译深入理解Java String及intern
- 通过反编译深入理解Java String及intern
- 通过反编译字节码来理解 Java 枚举
- 通过反编译深入理解Java String及intern
- 通过反编译深入理解Java String及intern
- 通过反编译深入理解Java String及intern
- 通过反编译深入理解Java String及intern
- 通过反编译深入理解Java String及intern
- 通过反编译深入理解Java String及intern
- 通过反编译深入理解Java String及intern
- 通过反编译深入理解Java String及intern
- 通过反编译深入理解Java String及intern
- 通过反编译深入理解Java String及intern
- 通过反编译深入理解Java String及intern
- 通过反编译深入理解Java String及intern(转)
- 通过反编译深入理解Java String及intern
- Java枚举的七种常见用法
- 深入理解枚举(转载自Blog : http://blog.csdn.net/javazejian )