黑马程序员技术交流社区

标题: 枚举的values()方法 [打印本页]

作者: 鲁中需    时间: 2012-10-25 18:57
标题: 枚举的values()方法
使用枚举,我们经常使用values()方法,但是我查看JDK文档中的Enum类中并不存在这个方法,在Object类中也不存在该方法,有疑问,求解。
作者: 冯纪纲    时间: 2012-10-25 19:28

估计是你没有在意Enum类和enum关键字的不同,下面做一个例子,你就会发现其中的区别了。

首先写一个enum类:


public enum MyEnum {

male, female

}


然后在cmd中到该类的目录下,

执行:javap MyEnum 进行反编译一下,如图:




可以很清楚的看到,其实JVM是将enum变成一个继承Enum的类,他进行了一系列的操作。

未命名.JPG (25.24 KB, 下载次数: 71)

未命名.JPG

作者: 王得新    时间: 2012-10-25 19:50
那个values()是个静态方法,是编译时生成的 ,并非继承自 java.lang.Enum,

也看到了三楼反编译的图片了,如果values方法是继承自Enum的话,也不会在图片中有"public static MyEnum[] values();"

(因为子类继承父类的话,父类中的方法在子类中是看不到的啊,可是反编译却看到了,所以说values这个方法是编译时产生的)


作者: 唐进    时间: 2012-10-25 20:05
楼上说父类的方法子类看不到,我不是很认可,父类的方法就是给子类去继承和重写的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2