*多为junit运行,不能直接运行。
enumDemo.java
import org.junit.Test;
/* 1.枚举相当于列举,列举出你规定所有的数据,在取值的时候只能取你规定的数据,不能取别的,如:星期一,星期二。。。星期日;一年有春夏秋冬。。
* 2.枚举类是一种特殊形式的Java类
* 3.与Java中的普通类一样,在声明枚举时,也可以声明属性,方法和构造函数,
* 但枚举的构造函数必须为私有
* 4.枚举类也可以实现接口或继承抽象类。
* 5.枚举类中的每一个枚举值代表枚举类的一个实例对象。
* 6.若枚举类只有一个枚举值,则可以当做单态(单例)设计模式使用。
* enum A{
* A;
* }
* 定义了一个枚举值,你所要使用的只能是这一个对象。
*
* 7.当传过一个字符串的时候,要判断该字符串是否在枚举中,需要将字符串转换为枚举形式进行判断。
*
*/
public class enumDemo {
@Test
public void test()
{
print(Grade.B);
}
public void print(Grade g)
{
String value=g.getValue();
System.out.println(value);
}
//如何定义枚举的构造函数,方法和字段,去封装更多的信息
enum Grade{
A("90-100"),B("80-90"),C("70-80"),D("60-70");
private String value;
private Grade(String value)
{
this.value=value;
}
public String getValue()
{
return this.value;
}
}
//测试枚举的常用方法
@Test
public void testDemo()
{
System.out.println(Grade.C.name()); //C 打印枚举的名字
System.out.println(Grade.C.ordinal()); //2 打印出C所在的角标位置
//将字符串转换成枚举
String str="B";
Grade g=Grade.valueOf(Grade.class, str);
Grade g1=Grade.valueOf(str);
System.out.println(g); //B
System.out.println(g1); //B 这两个是一样的
Grade gs[]=Grade.values(); //遍历出枚举的所有值,返回数组形式
for(Grade g2:gs)
{
System.out.println(g2); //A B C D
}
}
}
abstractEnum.java
import org.junit.Test;
public class abstractEnum {
@Test
public void test()
{
print(Grade.B);
}
public void print(Grade g)
{
String value=g.localeValue();
System.out.println(value);
}
//抽象方法枚举
enum Grade{
A("90-100")
{
//实现抽象方法
public String localeValue()
{
return "优";
}
}
,B("80-90")
{
public String localeValue()
{
return "良";
}
}
,D("70-80")
{
public String localeValue()
{
return "差";
}
}
,E("60-70")
{
public String localeValue()
{
return "及格";
}
};
private String value;
private Grade(String value) //枚举的构造函数必须为 :私有
{
this.value=value;
}
public String getValue()
{
return this.value;
}
//定义抽象方法
public abstract String localeValue();
}
}