我需要了解java示例中枚举的行为吗?

时间:2012-06-21 16:12:48

标签: java enums

第一个是枚举类

enum coffeeSize{
    BIG(8), HUGE(10), OVERWHELMING(16);
    private int ounces;
    coffeeSize(int ounces ){
        this.ounces = ounces;
    }
    public int getOunces(){
        return ounces;
    }

}

这是类CoffeeTest1和主要

 public class CoffeeTest1 {
      coffeeSize size;

      public static void main (String args[]) {
          CoffeeTest1 drink1 = new CoffeeTest1();
          drink1.size = coffeeSize.BIG;

          System.out.println(" " + drink1.size.getOunces());
      }
}

以下是输出

8  

我的问题:    我不明白drink1.size.getounces()如何设法输出8.我没有给出构造函数coffeeSize(8)对象(例如:coffeeSize somex = new coffeeSize(BIG))。我想知道背后的这个简单的微妙逻辑。有人可以帮我理解吗?

5 个答案:

答案 0 :(得分:1)

一个建议:查找,学习并遵循Sun Java编码标准。它会提高代码的可读性。

它输出8,因为根据你的枚举,这是BIG咖啡大小的大小,以盎司为单位。这是你传递给BIG构造函数的值。

drink1是类的实例,它具有名为coffeeSize的{​​{1}}类型的包可见数据成员。每个size实例都有一个方法coffeeSize,它返回传递给构造函数的整数值。

没有什么微妙之处。

答案 1 :(得分:1)

  

我不明白“drink1.size.getounces()”如何设法输出8。

     

[...]

     

我想知道背后的这个简单的微妙逻辑。

要理解这背后的逻辑,您可以将enum视为常规class(实际上是如何编译的),以及

BIG(8)

作为此类的实例,类似于

new coffeesize(8);

现在应该清楚为什么drink1.size.getOunces()打印8:BIG只是coffeesize枚举的一个实例,在构造它时将ounces设置为8。

答案 2 :(得分:0)

您会注意到枚举上定义了getOunces方法。枚举值本身可以包含Java中的属性和方法。

暗示CoffeeTest1有一个引用枚举值的字段。

所以drink1是该类的一个实例。
size属性设置为枚举的BIG实例。
Bigounces 8。

答案 3 :(得分:0)

当你指定BIG(8)时,你正在创建它,将8传递给它的构造函数(10或16)。当您使用coffeeSize.BIG.getOunces()时,您正在调用其方法getOuncesBIGHUGEOVERWHELMINGcoffeeSize的可能值,每个值都有自己的状态。

答案 4 :(得分:0)

enum Colour {
   Black,White,Red,Green,Yellow,Grey
}

public class EnumExample {

   public static void main(String[] args) {

     Colour colour;

     colour = Colour.Black;

     System.out.println("Selected "+colour+" Colour");

     colour = Colour.Yellow;

     System.out.println("Selected "+colour+" Colour");
  }

}