枚举类笔记

public enum  SeasonEnum

{

  SPRING,SUMMER,FALL,WINTER;

}

 

使用枚举类,可使用EnumClass.variable,如SeasonEnum.SPRING

public class TestEnum

{

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 WINNER:

 System.out.println("");

 break;

}

}

public static void main(String[] args)

{

//所有枚举类都有一个values方法,返回该枚举类的所有实例

for(SeasonEnum s: SeasonEnum.values())

{

System.out.println(s);

}

//平常使用枚举实例时,总是通过EnumClass.variable形式来访问

new TestEnum().judge(SeasonEnum.SPRING);

}

}

 

java.lang.Enum的方法

a: int compareTo(E o):用于与指定枚举队相比较顺序。

b: String name():返回枚举实例的名称,优先使用toString()方法

c: int ordinal():返回枚举类中的索引值。

d:String toString(): 返回枚举常量的名称。

e:public static <T extends Enum<T>>T valueOf(Class<T>enumType,String name):返回指定枚举类中指定名称的枚举值。

 

  枚举类的实例只能是枚举值,而不能随意的通过new来创建枚举类对象。

 

 

public enum Gender
{
 MALE,FEMALE;
 private String name;

 public void setName(String name)
 {
  switch (this)
  {
   case MALE:
    if (name.equals("男"))
    {
     this.name = name;
    }
    else
    {
     System.out.println("参数错误");
     return;
    }
    break;
   case FEMALE:
    if (name.equals("女"))
    {
     this.name = name;
    }
    else
    {
     System.out.println("参数错误");
     return;
    }
    break;
  }
 }
 public String getName()
 {
   return this.name;
 }
}

 

public class TestGender
{
 public static void main(String[] args)
 {
  Gender g = Enum.valueOf(Gender.class , "FEMALE");
  g.setName("女");
  System.out.println(g + "代表:" + g.getName());
  g.setName("男");//试图将一个FAMALE设置成"男“,错误
  System.out.println(g + "代表:" + g.getName());
 }
}

 

枚举通常设计成不可变类,属性不允许修改。

public enum Gender
{
 //此处的枚举值必须调用对应构造器来创建
 MALE("男"),FEMALE("女");//等同于public  static final Gender MALE = new Gender("男"),public  static final Gender MALE = new Gender("女")
 
 private String name;
 //枚举类的构造器只能使用private修饰
 private Gender(String name)
 {
  this.name = name;
 }
 public String getName()
 {
   return this.name;
 }
}

 

 

包含抽象方法的枚举类

public enum Operation2
{
 PLUS
 {
  public double eval(double x , double y)
  {
   return x + y;
  }
 },
 MINUS
 {
  public double eval(double x , double y)
  {
   return x - y;
  }
 },
 TIMES
 {
  public double eval(double x , double y)
  {
   return x * y;
  }
 },
 DIVIDE
 {
  public double eval(double x , double y)
  {
   return x / y;
  }
 };
 //为枚举类定义一个抽象方法,这个抽象方法由不同枚举值提供不同的实现
 public abstract double eval(double x, double y);
 public static void main(String[] args)
 {
  System.out.println(Operation.PLUS.eval(3, 4));
  System.out.println(Operation.MINUS.eval(5, 4));
  System.out.println(Operation.TIMES.eval(5, 4));
  System.out.println(Operation.DIVIDE.eval(5, 4));
 }
}

枚举类里定义抽象方法时无须显示使用abstract 关键字将枚举定义成抽象类,但因为枚举类需要显示创建枚举值,而不是作为父类,所以定义每个枚举值时必须为抽象方法提供实现,否则将出现编译错误。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值