/**
* 枚举:
* 数据的值不能任意,必须有范围使用到枚举
* 例子:
* ennm Grade{
* A,B,C,D,E;
* }
*/
public class grade {
/*
* 没有枚举的时候,实现枚举的功能
*/
public final static 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();
// 首先私有的构造方法,防止在外部创建类的实例对象
private grade() {
}
/*
* enum Grade就相当于一个gradele类
* enum类是很特殊的一个类,实际上它是一个抽象类。
* 枚举中可以用抽象方法,但是枚举中的每一个对象都分别实现抽象方法;
* 枚举中声明的每一个枚举值都是枚举类的一个实例对象
* 可以有构造方法,必须私有
* 可以实现接口,继承抽象类
* jdk5 扩展了switch 除了接收 int char byte short 还可以接收枚举
* 枚举类只有一个枚举值,可以当做单态设计模式
*/
enum Grade{
/*
* 这里的A,B,C,D,E都是一个类的实例对象
* A相当于public final static grade A = new Grade();
* 如果枚举里面写了有参构造方法,必须在A指定构造方法如:A("100-80")
* 枚举相当于把这个类的实例对象写入了这个类当中,外部不可见。
*/
A("100-80") {
@Override
public String localValue() {
return "优";
}
},B("80-70") {
@Override
public String localValue() {
return "良";
}
},C("70-60") {
@Override
public String localValue() {
return "及格";
}
},D("60-0") {
@Override
public String localValue() {
return "差";
}
};
private String value;
private Grade(String value){
this.value=value;
}
public String Value(){
return this.value;
}
public abstract String localValue();
}
}
import org.junit.Test;
import cn.edu.Enum.grade.Grade;
public class demo {
@Test
public void test1(){
System.out.println(Grade.A.localValue());
}
/*
* int compareTo(E o)
* 比较此枚举与指定对象的顺序。
*
* Class<E> getDeclaringClass()
* 返回与此枚举常量的枚举类型相对应的 Class 对象。
*
* String name()
* 返回此枚举常量的名称,在其枚举声明中对其进行声明。
*
* int ordinal()
* 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
*
* String toString()
* 返回枚举常量的名称,它包含在声明中。
*
* static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
* 返回带指定名称的指定枚举类型的枚举常量。
*/
@Test
public void test2(){
//测试通过
String value="B";
System.out.println(Grade.valueOf(value));
//测试不通过
String value1="Y";
System.out.println(Grade.valueOf(value1));
//这个方法常用与测试该String是否是该枚举值当中的
}
}