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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 追逐 高级黑马   /  2014-4-8 10:42  /  745 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 追逐 于 2014-4-9 08:12 编辑
  1. //运行结果为什么会是RED呢。求运行原理
复制代码
  1. public class EnumTest {
  2.         public static void main(String[] args) {

  3.                 TrafficLamp tl = TrafficLamp.RED;
  4.                 System.out.println(tl);
  5.         }

  6.         //TrafficLamp是交通灯的意思
  7.         public enum TrafficLamp {
  8.                 RED(30) {
  9.                         public TrafficLamp nextLamp() {
  10.                                 return GREEN;
  11.                         }
  12.                 },
  13.                 GREEN(35) {
  14.                         public TrafficLamp nextLamp() {
  15.                                 return YELLOW;
  16.                         }
  17.                 },
  18.                 YELLOW(3) {
  19.                         public TrafficLamp nextLamp() {
  20.                                 return RED;
  21.                         }
  22.                 };
  23.                 public abstract TrafficLamp nextLamp();
  24.                 private int time;
  25.                 private TrafficLamp(int time) {
  26.                         this.time = time;
  27.                 }
  28.         }
  29. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

5 个回复

正序浏览
╰つ 发表于 2014-4-8 11:48
你又没有调用内部类里面的方法,所以你开始给的什么值还是什么值啊

哦哦。明白了
回复 使用道具 举报
╰つ 发表于 2014-4-8 11:48
你又没有调用内部类里面的方法,所以你开始给的什么值还是什么值啊

哦哦。明白了
回复 使用道具 举报
你又没有调用内部类里面的方法,所以你开始给的什么值还是什么值啊
回复 使用道具 举报
Engle 发表于 2014-4-8 11:04
枚举(Enum):我们所定义的每个枚举类型都继承自 java.lang.Enum类,枚举中的每
个成员默认都是 public st ...

但是我认为结果应该是GREEN啊。因为他定义了一个匿名内部类而且里面也重写了父类的抽象方法。
所以我认为他运行后应该输出的是匿名内部类方法中的结果啊。但是结果却不是匿名内部类中的方法中的结果。所以我很对这个结果很疑惑。因为这个结果和我推算出来的结果不一致。所以我想问一下这个结果为什么会是RED。请问能帮我分析一下吗?
回复 使用道具 举报
枚举(Enum):我们所定义的每个枚举类型都继承自 java.lang.Enum类,枚举中的每
个成员默认都是 public static final的。
而每个枚举的成员其实就是您定义的枚举类型的一個实例(Instance) 。换句话说,
当定义了一个枚举类型后,在编译时刻就能确定该枚举类型有几个实例,分别是什
么。在运行期间我们无法再使用该枚举类型创建新的实例了,这些实例在编译期间
就已经完全确定下来了。
你的代码:
TrafficLamp tl = TrafficLamp.RED;
这不就是获取的枚举的实例吗?所以打印RED不是很正常吗?
可能你觉得为什么不是一个具体值是吗?
枚举和常量很像,我们定义常量的时候是通过给常量赋值,以达到在代码中使用常量进行标识。
而枚举则省去了我们赋值了,每个枚举实例在内存中都拥有自己的一个地址,我们直接用就可以了

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马