黑马程序员技术交流社区

标题: 问枚举运行示例中的运行原理 [打印本页]

作者: 追逐    时间: 2014-4-8 10:42
标题: 问枚举运行示例中的运行原理
本帖最后由 追逐 于 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. }
复制代码




作者: Engle    时间: 2014-4-8 11:04
枚举(Enum):我们所定义的每个枚举类型都继承自 java.lang.Enum类,枚举中的每
个成员默认都是 public static final的。
而每个枚举的成员其实就是您定义的枚举类型的一個实例(Instance) 。换句话说,
当定义了一个枚举类型后,在编译时刻就能确定该枚举类型有几个实例,分别是什
么。在运行期间我们无法再使用该枚举类型创建新的实例了,这些实例在编译期间
就已经完全确定下来了。
你的代码:
TrafficLamp tl = TrafficLamp.RED;
这不就是获取的枚举的实例吗?所以打印RED不是很正常吗?
可能你觉得为什么不是一个具体值是吗?
枚举和常量很像,我们定义常量的时候是通过给常量赋值,以达到在代码中使用常量进行标识。
而枚举则省去了我们赋值了,每个枚举实例在内存中都拥有自己的一个地址,我们直接用就可以了

作者: 追逐    时间: 2014-4-8 11:17
Engle 发表于 2014-4-8 11:04
枚举(Enum):我们所定义的每个枚举类型都继承自 java.lang.Enum类,枚举中的每
个成员默认都是 public st ...

但是我认为结果应该是GREEN啊。因为他定义了一个匿名内部类而且里面也重写了父类的抽象方法。
所以我认为他运行后应该输出的是匿名内部类方法中的结果啊。但是结果却不是匿名内部类中的方法中的结果。所以我很对这个结果很疑惑。因为这个结果和我推算出来的结果不一致。所以我想问一下这个结果为什么会是RED。请问能帮我分析一下吗?
作者: ╰つ    时间: 2014-4-8 11:48
你又没有调用内部类里面的方法,所以你开始给的什么值还是什么值啊
作者: 追逐    时间: 2014-4-8 12:54
╰つ 发表于 2014-4-8 11:48
你又没有调用内部类里面的方法,所以你开始给的什么值还是什么值啊

哦哦。明白了
作者: 追逐    时间: 2014-4-8 13:03
╰つ 发表于 2014-4-8 11:48
你又没有调用内部类里面的方法,所以你开始给的什么值还是什么值啊

哦哦。明白了




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