枚举类

一 :什么是枚举类型


在某些情况,一个类的对象是固定的,例如一年有12个月,一年有4个季节 ,在Java中
这些类被称为枚举类。


二:早期的枚举类实现形式:

三:Enum关键字

Java五新增了一个euum关键字(他的地位和class interface 关键字地位相同)用来定义枚举类,枚举类是一种特殊的类,他一样可以有自己的成员变量、方法;可以实现一个或多个接口,也可以定义自己的构造器

注意事项:

一个Java源文件中最多只能定义一个public访问权限的枚举类,且该Java原文件也必须和该枚举类的类名相同。

四:枚举类和普通类的区别

枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了java.lang.Enum类,而不是默认继承Object类,因此枚举类不能显示继承其他父类。其中Java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口。

使用enum定义、非抽象的枚举类默认会用final修饰,随意枚举类没有派生子类;

枚举类的构造器只能使用private访问控制符,如果省略前面的修饰符,则默认为private修饰,如果强制的话只能使用private修饰符;

枚举类的所有实现必须在枚举的第一行显示列出,否则这个枚举类永远不能产生实例。

五:如何定义一个枚举类

由此可见 枚举类与class类和interface类的作用差不多;定义枚举类时需要显示出所有的枚举值,枚举值中间用,隔开,枚举值结束后用;结束,这些枚举值代表所有可能的实例。

六:使用前面定义的枚举类实现某个实例

package Demo;

/**
 * @author Administrator
 */
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);
    }
}

结果图

七:枚举类提供的方法

所有的枚举类都继承java.lang.Enum类,所以枚举类可以直接使用java.lang.Enum类中所宝行的方法。

1)int compareTo(E o)该方法用于指定枚举对象比较顺序,同一个枚举实例只能与相同烈性的枚举实例进行比较。如果该枚举对象位于指定枚举对象之后,则返回正整数;如果该枚举对象位于指定枚举对象之前,则返回负整数,否则返回零。

2)String name () :返回枚举实例的名称,

3).int ordinal();返回枚举类中的索引值

4)String ToString ();返回枚举常量的名称,与name方法相似,但是toString()方法更加常用

八:枚举的成员变量、方法和构造器

1)定义一个枚举的实例变量

上面定义了一个枚举的实例变量name 下面来调用这个枚举类

 

1)通过Enum的valueOf来获取枚举类的类型值,

在java中应该把类设置为良好的封装性 所以我们在类中实例要设置为私有的,通过方法对类的实例进行使用,上面的枚举类改为

package Demo;

/**
 * @author Administrator
 */

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 name;
    }
}

 

九:实现接口的枚举类

定义一个接口

public interface GenderDescription{

  void info();

}

实现枚举接口

public Enum Gender implements GenderDesc{

   

}

十:包含抽象方法的枚举类

注意:并不是所有的枚举类都使用final修饰!非抽象的枚举类才默认使用final修饰。对于一个抽象的枚举类而言----只有包含了抽象方法,他就是抽象枚举类,系统会默认使用abstract修饰,而不是使用final修饰。

package Demo;

/**
 * @author Administrator
 */
public enum  Operation {
    PLUS{
        @Override
        public double eval(double x , double y){
            return x+y;
        }
    },
    MINUS{
        @Override
        public double eval(double x , double y){
            return x-y;
        }
    },
    TIMES{
        @Override
        public double eval(double x , double y){
            return x*y;
        }
    },
    DIVDE{
        @Override
        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.DIVDE.eval(5,4));
    }
}

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值