关于Enum枚举类没有values()方法却可以在枚举类中使用的问题
2014-06-24 10:03
281 查看
在java.lang.Enum类中,所有的方法如下所示:
![](http://img.blog.csdn.net/20140624095602109?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3Fpc2Vu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
里面并没有values()静态方法,而在我们使用enum类时,例如:enum classA{
RED,GREEN
}
可以通过java编译器的提示得到values()静态方法,这是为什么呢?
![](http://img.blog.csdn.net/20140624095924156?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3Fpc2Vu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这是由于java编译器在对enum关键字进行处理时,实际上是将enum转换成为了java.lang.Enum类的一个子类来完成,而这个子类中含有values()静态方法。这一点,可以通过反编译enum类来查看。
![](http://img.blog.csdn.net/20140624100124312?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3Fpc2Vu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
如图,通过javap反编译enum枚举类,可以看到编译器在对enum处理时,实际上是转换成了Enum的一个子类来实现的,里面可以看到有values()静态方法的声明。
里面并没有values()静态方法,而在我们使用enum类时,例如:enum classA{
RED,GREEN
}
可以通过java编译器的提示得到values()静态方法,这是为什么呢?
这是由于java编译器在对enum关键字进行处理时,实际上是将enum转换成为了java.lang.Enum类的一个子类来完成,而这个子类中含有values()静态方法。这一点,可以通过反编译enum类来查看。
如图,通过javap反编译enum枚举类,可以看到编译器在对enum处理时,实际上是转换成了Enum的一个子类来实现的,里面可以看到有values()静态方法的声明。
相关文章推荐
- 关于如何使用枚举类的values方法!
- 关于如何使用枚举类的values方法!
- 利用运行时,给UIImageView写一个分类,交换里面的setImage的方法,可以重绘图片,提高内存的利用率(要是没有重绘图片,直接使用系统提供的setImag就会造成占用大量的内存问题)
- 关于如何使用枚举类的values方法!
- 关于使用VS.Net2003调试器出现的问题及相关解决方法 (转)
- 关于在使用Exchange2003系统时无法向sina,yahoo,hotmail等邮箱发送邮件问题的解决方法
- 关于使用VS.Net2003调试器出现的问题及相关解决方法[转]
- 关于.net中使用axmschart控件editcopy方法的问题!
- 关于在英创em9161板上使用ADO.net连接远程数据库提示 “无法找到 PInvoke dll"dbnetlib.dll"”问题解决方法
- JavaScript中关于indexOf的使用方法与问题小结
- 这个关于ATTRIBUTE的使用方法的例子还算可以
- 关于安装IE8之后VS2008使用MFC出现问题的解决方法
- 关于使用asp.net调试器出现的问题及相关解决方法
- 关于asp.net[没有相关的源行]错误的解决方法及IIS安装问题
- 关于form表单的submit提交时对象没有该属性和方法问题
- 关于Arcgis的部分ArcToolBox工具,在AE中使用时没有授权的问题
- 关于锚点页内链接跳转出现问题(不响应,没有反应)的解决方法(ZT)
- 关于ASP.NET“操作必须使用一个可更新的查询”问题的解决方法
- 关于编码过滤的问题,这里使用在web.xml中添加过滤器的方法!
- 关于使用dataAdapter.acceptChanges( )方法更新dataSet和数据库的问题