关于android开发中涉及到的java知识:面向对象(七)

来源:互联网 发布:cache数据库 m语言 编辑:程序博客网 时间:2024/04/28 13:20

面向对象(七)
今天我要总结下枚举类的知识
1.初入枚举类。
枚举类的定义很抽象,枚举类中的对象是固定且有限的。那么如何创造出一个枚举类呢?
a.构造器全用private隐藏起来。
b.把类中所有可能实例都用public static final修饰的类变量保存起来,所以枚举类不能派生子类。
c.可以提供一些静态方法,允许其他程序根据特定参数获取与之匹配的实例。
例:
public class SeasonTest
{
 public SeasonTest(Season s)
 {
  System.out.println(s.getName() +
   ",这真是一个"+ s.getDesc() + "的季节");
 }
 public static void main(String[] args)
 {
  //直接使用Season的FALL常量代表一个Season对象
  //输出秋天,这真是一个秋高气爽的季节
  new SeasonTest(Season.FALL);
 }
}
class Season
{
 //把Season类定义成不可变的,将其Field也定义成final
 private final String name;
 private final String desc;
 public static final Season SPRING
  = new Season("春天" , "趁春踏青");
 public static final Season SUMMER
  = new Season("夏天" , "夏日炎炎");
 public static final Season FALL
  = new Season("秋天" , "秋高气爽");
 public static final Season WINTER
  = new Season("冬天" , "围炉赏雪");
 public static Season getSeason(int seasonNum)
 {
  switch(seasonNum)
  {
  case 1 :
   return SPRING;
  case 2 :
   return SUMMER;
  case 3 :
   return FALL;
  case 4 :
   return WINTER;
  default :
   return null;
  }
 }
 //将构造器定义成private访问权限
 private Season(String name , String desc)
 {
  this.name = name;
  this.desc = desc;
 }
 //只为name和desc提供getter方法
 public String getName()
 {
  return this.name;
 }
 public String getDesc()
 {
  return this.desc;
 }
}
这是一个网上的枚举类代码,仅供参考。
还有另外一种定义枚举类的方式:Java5新增了一个关键字enum,用于定义枚举类。
注:a.枚举类可以实现一个或多个接口,使用Enum定义的枚举类默认继承java.lang.Enum类。
b.使用enum定义,非抽象的枚举类会默认使用final修饰。
c.枚举类的实例必须在第一行现式列出,否则将产生不出实例。
例:
public class EnumTest
{
 public void judge(SeasonEnum s)
 {
  //switch语句里的表达式可以是枚举值
  switch (s)
  {
   case SPRING:
    System.out.println("春暖花开,正好踏青");
    break;
   case SUMMER:
    System.out.println("夏日炎炎,适合游泳");
    break;
   case FALL:
    System.out.println("秋高气爽,进补及时");
    break;
   case WINTER:
    System.out.println("冬日雪飘,围炉赏雪");
    break;
  }
 }
 public static void main(String[] args)
 {
  //所有枚举类都有一个values方法,返回该枚举类的所有实例
  for (SeasonEnum s : SeasonEnum.values())
  {
   System.out.println(s);
  }
  //平常使用枚举实例时,
  //总是通过EnumClass.variable形式来访问
  new EnumTest().judge(SeasonEnum.SPRING);
 }
}
enum SeasonEnum
{
 // 在第一行列出4个枚举实例
 SPRING,SUMMER,FALL,WINTER;
}
这是一个网上的使用enum定义的枚举类代码,仅供参考。
通过对上面两个代码的研究,我想大概可以算是对枚举类有了一定的了解。我们从上面两个代码的对比中

不难发现,使用Enum十分方便。现在让我们来看java.lang.Enum类中所提供的方法:
a.int compareTo(E o):从英文的理解上可以看做是比较,它用来比较枚举类中对象的顺序,如果该枚举

对象在指定枚举类对象之后则返回正整数,若该枚举对象在指定枚举类对象之前则返回负整数,反之则为

零。
b.String toString():返回枚举常量的名称。
c.String name():很好理解,就是返回枚举实例的名称,和toString方法相似,但优先考虑toString方法

,因为他的返回更友好。
d.int ordinal():返回枚举值在枚举类中的索引值(就是枚举值在枚举声明中的位置,第一个枚举值的索

引值为0)。
e.valueOf方法:返回枚举类中指定名称的枚举值。
2.枚举类的Field,方法和构造器。
定义一个实例变量:
public enum SeasonEnum

 SPRING,SUMMER,FALL,WINTER;
 public String name;
}
定义枚举类方法:
public enum SeasonEnum

 SPRING,SUMMER,FALL,WINTER;
 private String season;
 public void setSeason(String season)
 {
  case SPRING:
   if(name.equals("春季"))
   {
    this.season = season;
   }
   else
   {
    System.out.println("参数不匹配");
   } 
   break;
  case SUMMER:
   //同上
   ......
  case FALL:
   //同上
   ......
  case WINTER:
   //同上
   ......
 }
 public String getSeason()
 {
  return this.season;
 }
}
定义枚举类构造器:
public enum SeasonEnum

 SPRING("春季"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天");
 private final String season; 
 //枚举类的构造器只能使用private修饰
 private SeasonEnum(String season)
 {
  this.season = season;
 }
 public String getSeason()
 {
  return this.season;
 }
}
另外关于实现接口的枚举类和包含抽象方法的枚举类就不多提了,它和普通的类实现起来差不多,那么今

天就整理到这里了。

0 0