A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 鲁中需 中级黑马   /  2012-10-25 18:57  /  1599 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

使用枚举,我们经常使用values()方法,但是我查看JDK文档中的Enum类中并不存在这个方法,在Object类中也不存在该方法,有疑问,求解。

3 个回复

倒序浏览

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

首先写一个enum类:


public enum MyEnum {

male, female

}


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

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




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

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

未命名.JPG
回复 使用道具 举报
那个values()是个静态方法,是编译时生成的 ,并非继承自 java.lang.Enum,

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

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

回复 使用道具 举报
楼上说父类的方法子类看不到,我不是很认可,父类的方法就是给子类去继承和重写的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马