day14-枚举

一、 枚举

1.枚举类是一个新的类型跟class定义的普通类有很多的相同之处,它也可以定义属性和方法,但是不能继承其他的类了,因为它已近继承了java.lang.Enum。

2.什么时候使用枚举呢?

当我们定义的一些有限的常量的时候,不再像之前那样定义public static final了 ,而是直接在枚举类中列举出来即可了。使用上方便很多。

3.枚举的定义

(1)普通的列举: 仅仅只要列出有限常量即可。其实底层是将这些常量定义到一个数组中的。

public enum Score {
    A,B,C,D,E
}

(2)带参数的列举,此时就需要自己定义构造函数了  

public enum Score {
A(
"90-100","优秀"),
B("80-90","良好"),
C("70-80","中等"),
D("60-70","及格"),
E("60以下","挂科");

private String score;
private String type;

private Score() {}

//两个参数的构造函数  普通的类定义构造函数一样

private Score(String score,String type) {
this.score=score;
this.type=type;
}



(3)带有自己的方法的定义,且可以直接覆写的方式

public enum Score {
    A("90-100","优秀"){
        @Override
        public boolean hasWork() {
            return false;
        }
    },B("80-90","良好"),C("70-80","中等"),D("60-70","及格"),E("60以下","挂科");
    
    private String score;
    private String type;
    
    private Score() {}
    
    private Score(String score,String type) {
        this.score=score;
        this.type=type;
    }

//是否有作业
  public boolean hasWork() {
        return true;
    }

上面的代码我在枚举类中定义了一个haswork()方法,表示要写作业的,但是成绩为A等的人就不用写作业,那么我此时就可以直接在枚举中的A后面直接复写那个hasWork()方法,这样调用A的时候就是返回A的复写后的结果,很方便灵活。

4.枚举的使用

(1)经常与switch case结合使用,可以在初始化的时候就给赋一个值。比如Score s = Score.A;这就初始化好了一个枚举类对象。

(2)枚举中的value()方法,返回一个对应类型的数组对象。

(3)枚举中的valueOf()方法,两种,第一个根据字符串,返回一个枚举常量,第二个是根据枚举的类型和常量(可用变量来接收这个常量,那样就是动态的),返回一个具体的枚举中的常量(第二种valueOf()更加动态,可以实现跟switch case 灵活应用)

     String type = getType(score); //type就是可以动态变化,传入给valueOf时候也就可以实现动态了
        
        if("不及格".equals(type)) {
            System.out.println(type);
            return;
        }
        System.out.println(type);
        switch (Score.valueOf(Score.class, type)) { //可以有动态的结果了
        case A:
            System.out.println("优秀");
            break;
        case B:
            System.out.println("良好");
            break;
        case C:
            System.out.println("中等");
            break;
        case D:
            System.out.println("及格");
            break;
        default:
            break;
        }

 

posted on 2018-07-31 22:01  志爱007  阅读(111)  评论(0编辑  收藏  举报