枚举

枚举 : 把数据控制在一定范围内

2016-10-08 14:52:20

传统方式定义枚举

public class Student {

    private String name;

    private Grade grade;//ABCDE

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Grade getGrade() {
        return grade;
    }

    public void setGrade(Grade grade) {
        this.grade = grade;
    }

}

//传统方式定义枚举
class Grade{

    private Grade(){};//构造方法私有化,外部就不能常见此类的实例
    public static Grade A = new Grade();
    public static Grade B = new Grade();
    public static Grade C = new Grade();
    public static Grade D = new Grade();
    public static Grade E = new Grade();


}

public class Demo {

    public static void main(String[] args) {

    Student student = new Student();
    student.setGrade(Grade.A);

    }

}

 

 

新增枚举类型

//JDK1.5以后新增了枚举类型

enum Grade{
    A,B,C,D,E
}

 

 

枚举

枚举类型中定义构造方法和普通字段

class Grade{
    private String value;//A:100-90 B:89-80 C:79-70 D:69-60 E:<60

    //构造方法私有化,外部就不能常见此类的实例
    private Grade(String value){
        this.value = value;
    };
    public static Grade A = new Grade("100-90");
    public static Grade B = new Grade("89-80");
    public static Grade C = new Grade("79-70");
    public static Grade D = new Grade("69-60");
    public static Grade E = new Grade("<60");

    public String getValue() {
        return value;
    }
}

enum Grade{

    A("100-90"),B("89-80"),C("79-70"),D("69-60"),E("<60");

    private String value;//A:100-90 B:89-80 C:79-70 D:69-60 E:<60

    //可以定义构造函数,但必须是私有的
    private Grade(String value){

        this.value = value;
    }

    public String getValue() {
        return value;
    }


}

 

 

枚举类型中定义普通方法


//传统方式定义枚举
class Grade{
    private String value;//A:100-90 B:89-80 C:79-70 D:69-60 E:<60
    //构造方法私有化,外部就不能常见此类的实例
    private Grade(String value){
        this.value = value;
    };
    public static Grade A = new Grade("100-90"){

        //匿名内部类,覆盖了父类中的方法
        public String toString1(){
            return "100-90";
        }
    };
    public static Grade B = new Grade("89-80");
    public static Grade C = new Grade("79-70");
    public static Grade D = new Grade("69-60");
    public static Grade E = new Grade("<60");

    public String getValue() {
        return value;
    }

    public String toString1(){
        return null;
    }

}

enum Grade{

    A("100-90"){

        //匿名内部类,覆盖了父类中的方法
        public String toString1(){
            return "100-90";
        }
    },B("89-80"){

        //匿名内部类,覆盖了父类中的方法
        public String toString1(){
            return "89-80";
        }
    },C("79-70"){

        //匿名内部类,覆盖了父类中的方法
        public String toString1(){
            return "79-70";
        }
    },D("69-60"){

        //匿名内部类,覆盖了父类中的方法
        public String toString1(){
            return "69-60";
        }
    },E("<60"){

        //匿名内部类,覆盖了父类中的方法
        public String toString1(){
            return "<60";
        }
    };

    private String value;//A:100-90 B:89-80 C:79-70 D:69-60 E:<60

    //可以定义构造函数,但必须是私有的
    private Grade(String value){

        this.value = value;
    }

    public String getValue() {
        return value;
    }

    //还可以定义普通方法和字段

    public abstract String toString1();
}

public class Demo {

    public static void main(String[] args) {

    System.out.println(Grade.A.toString1());

    }

}

 

 

带抽象方法的枚举

enum Grade {

    A("100-90") {

        // 匿名内部类,覆盖了父类中的方法
        public String toString1() {
            return "100-90";
        }

        public String toLocalString() {

            return "优秀";
        }
    },
    B("89-80") {

        // 匿名内部类,覆盖了父类中的方法
        public String toString1() {
            return "89-80";
        }

        public String toLocalString() {

            return "良好";
        }
    },
    C("79-70") {

        // 匿名内部类,覆盖了父类中的方法
        public String toString1() {
            return "79-70";
        }

        public String toLocalString() {

            return "中等";
        }
    },
    D("69-60") {

        // 匿名内部类,覆盖了父类中的方法
        public String toString1() {
            return "69-60";
        }

        public String toLocalString() {

            return "一般";
        }
    },
    E("<60") {

        // 匿名内部类,覆盖了父类中的方法
        public String toString1() {
            return "尚需努力";
        }

        public String toLocalString() {

            return "优秀";
        }
    };

    private String value;// A:100-90 B:89-80 C:79-70 D:69-60 E:<60

    // 可以定义构造函数,但必须是私有的
    private Grade(String value) {

        this.value = value;
    }

    public String getValue() {
        return value;
    }

    // 还可以定义普通方法和字段

    public abstract String toString1();

    public abstract String toLocalString();
}

 

 

枚举特性

自定义枚举是java.Lang.Enum的子类

枚举继承过来的方法

public class Demo {

    public static void main(String[] args) {

//      System.out.println(Grade.A.name());// A
//      System.out.println(Grade.B.ordinal());// 枚举值的顺序,从0开始

        //列出所有的枚举值
        Grade[] values = Grade.values();
        for (Grade grade : values) {
            System.out.println(grade.name());
        }

        //String 转换为枚举类型
        Grade grade = Grade.valueOf("A");
        System.out.println(grade.toLocalString());

    }

}

 

 
posted @ 2016-10-08 14:51  woms  阅读(177)  评论(0编辑  收藏  举报