注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

山林客

简单不一定幸福,但幸福其实可以很简单。

 
 
 

日志

 
 
关于我

2004年毕业于中山大学,毕业后专注于网站开发和网络工程技术。先后取得SCWCD、CCNP认证,对Asp/Java有丰富的开发经验,对网络工程也有较深的研究。真诚欢迎大家多多指教、多多指点、多多指正,共同分享IT道路和人生道路上的喜怒哀乐。

网易考拉推荐

枚举详解  

2008-03-19 21:22:03|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
其实个人感觉在大多数情况下,枚举都可以通过在类中定义静态常量的方式来替代,不过有些情况,枚举还是有其先天优势,主要是其自动关联性,例如下面的例子,对于一杯Coffee有三种类型,分别是BIG,HUGE,OVERWHELMING,其对应的盎司分别为8,10,16,只要知道其size,马上就可以得到其盎司的值。
在类外声明枚举:
enum CoffeeSize { BIG, HUGE, OVERWHELMING }  
//可以把CoffeeSize看成类名,BIG看成该类中的一个静态常量,而且它的类型是CoffeeSize,所以使用类名.变量来引用
class Coffee {
  CoffeeSize size;  //定义一个CoffeeSize实例变量
}
public class CoffeeTest {
  public static void main(String[] args){
    Coffee drink = new Coffee();
    drink.size = CoffeeSize.BIG;
}
}
在类内部声明枚举:
class Coffee2 {
  enum CoffeeSize { BIG,HUGE,OVERWHELMING }   //后面可加或不加分号
  CoffeeSize size;  //声明一个实例变量
}
public class CoffeeTest2 {
  public static void main(String[] args){
    Coffee2 drink = new Coffee2();
    drink.size = Coffee2.CoffeeSize.BIG;
}
}
注意,不能在方法内部声明枚举。
可以把枚举看做一种类:
class CoffeeSize {
  public static final CoffeeSize BIG = new CoffeeSize("BIG",0);
  public static final CoffeeSize HUGE = new CoffeeSize("HUGE",1);
  public static final CoffeeSize OVERWHELMING = new CoffeeSize("OVERWHELMING",2);
  public CoffeeSize(String enumName, int index){
    //stuff here
}
public static void main(String[] args){
  System.out.println(CoffeeSize.BIG);
}
}
因为枚举是一种特殊的类,所以可以添加构造函数、实例变量、方法,以及常量特定类体。
enum CoffeeSize {
  BIG(8), HUGE(10), OVERWHELMING(16);
  CoffeeSize(int ounces){   //当使用CoffeeSize.BIG的时候自动传入8,并保存到this.ounces变量中
    this.ounces = ounces;
}
private int ounces; //代表每个Size的具体值
public int getOunces(){
  return ounces;
}
}
class Coffee {
  CoffeeSize size;
  public static void main(String[] args){
    Coffee drink1 = new Coffee();
    drink1.size = CoffeeSize.BIG;
    Coffee drink2 = new Coffee();
    drink2.size = CoffeeSize.OVERWHELMING;
    SyStem.out.println(drink1.size.getOunces());
    System.out.println(drink2.size.getOunces());
}
}
永远不能直接调用一个枚举构造函数。通常在常量值后面定义的参数自动调用枚举构造函数。例如BIG(8)调用CoffeeSize构造函数,则会取一个int型参数,并把int型字面值8传递给构造函数。
可以为构造函数定义多个参数,并且可以重枚举构造函数,就好像可以重载一个正常的类的构造函数一样。例如BIG(8,"A")。
可以在枚举中定义一个看似匿名内部类的常量特定的类体,当需要特殊的常量以重写枚举中定义的方法时,可以使用它。
enum CoffeeSize {
  BIG(8),
  HUGE(10),
  OVERWHELMING(16) {
    public String getLidCode() {  //重写枚举中的getLideCode()方法
      return "A";  //返回盖子的型号
}
}; //注意必须要分号结尾,就好像没有体的时候一样
CoffeeSize(int ounces){
  this.ounces = ounces;
}
private int ounces;
public int getOunces(){
  return ounces;
}
public String getLidCode(){
  return "B"; //对于枚举中的大多数常量(BIG和HUGE),使用的盖子型号是“B”
}
}
  评论这张
 
阅读(249)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018