java 基础之枚举

问题:对象的某个属性的值不能是任意的,必须为固定的一组取值其中的某一个

解决办法:

1)  在setGrade方法中做判断,不符合格式要求就抛出异常

2)  直接限定用户的选择,通过自定义类模拟枚举的方式来限定用户的输入

    写一个Grade类,私有构造函数,对外提供5个静态的常量表示类的实例

3)  jdk5中新定义了枚举类型,专门用于解决此类问题

4)  枚举就是一个特殊的java类,可以定义属性、方法、构造函数、实现接口、继承类

packagecn.itcast.enumeration;

import org.junit.Test;

publicclass Demo1 {

    @Test

    public void test() {

       print(Grade.B);

    }

   

    public void print(Grade g) // A B C D E

    {

       String value=g.getValue();

       System.out.println(value);

    }

}

/*

 * class Grade{ private Grade(){ }

 * public static final Grade A=new Grade();

 * public static final Grade B=new Grade();

 * public static final Grade C=new Grade();

 * public static final Grade D=new Grade();

 * public static final Grade E=new Grade();

 *  }

 */

//如何定义枚举的构造函数、方法、字段

enumGrade {// class A 100-90 B 89-80 C 79-70 D 69-60 E 59-0

    A("100-90"), B("89-80"),C("79-70"), D("69-60"), E("59-0");// object

    private String value;

    private Grade(String value){

       this.value=value;

    }

    public String getValue(){

       return this.value;

    }

}

publicclass Demo1 {

    @Test

    public void test() {

       print(Grade.B);   //89-80,良

    }

   

    public void print(Grade g) // A B C D E

    {

       String value=g.getValue();

       String value2=g.localeValue();

      

       System.out.println(value+","+value2);

    }

}

//带抽象方法的枚举

enumGrade {// class A 100-90优 B89-80良 C 79-70 一般D 69-60差 E 59-0不及格

    A("100-90"){

       public String localeValue(){

           return "优";

       }

    },

    B("89-80"){

       public String localeValue(){

           return "良";

       }

    },

    C("79-70"){

       public String localeValue(){

           return "一般";

       }

    },

    D("69-60"){

       public String localeValue(){

           return "差";

       }

    },

    E("59-0"){

       public String localeValue(){

           return "不及格";

       }

    };// object

   

    private String value;

    private Grade(String value){

       this.value=value;

    }

    public String getValue(){

       return this.value;

    }

    public abstract String localeValue();

}

//枚举类就是一个java类,也可以声明属性,方法,构造函数

public enum Grade4 {

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

   

    privateString value;

    privateGrade4(String value) {

       this.value= value;

    }

   

    publicString getValue() {

       returnvalue;

    }

}

//枚举类就是一个java类, 也可以继承抽象和实现接口

public enum Grade5 {

    // 抽象类不能创建实例对象

    A("90-100"){

       //new了一个Grade5的子类实例

       publicString toLocaleString() {

           return"优";

       }

    }

    ,B("80-89"){

       //new了一个Grade5的子类实例

       publicString toLocaleString() {

           return"良";

       }

    }

    ,C("70-79"){

       //new了一个Grade5的子类实例

       publicString toLocaleString() {

           return"中";

       }

    }

    ,D("60-69"){

       //new了一个Grade5的子类实例

       publicString toLocaleString() {

           return"差";

       }

    }

    ,E("0-59"){

       //new了一个Grade5的子类实例

       publicString toLocaleString() {

           return"不及格";

       }

    };

   

    privateString value;

    privateGrade5(String value) {

       this.value= value;

    }

   

    publicString getValue() {

       returnvalue;

    }

   

    // 对外提供一个方法,返回枚举的本地信息

    // 一个方法不知道如何实现,可以定义为抽象的

    publicabstract String toLocaleString();

   

}

版权声明:本文为小平果原创文章,转载请注明:http://blog.csdn.net/i10630226

原文地址:https://www.cnblogs.com/dingxiaoyue/p/4948269.html