-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
枚举概述:
为什么要定义枚举类:枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标
/*普通类模拟枚举类:
* 1.私有的构造方法* 2.每个元素分别用一个公有的静态成员变量表示
* 3.可以有若干公有方法或抽象方法
* */
<span style="font-size:18px;">class Weekday{
private Weekday(){
}
public final static Weekday Sun=new Weekday();
public final static Weekday Mon=new Weekday();
public Weekday nextDay(){
return this==Mon?Sun:Mon;
}
@Override
public String toString(){
return this==Mon?"Monday":"Sunday";
}
}</span>
使用匿名内部类来简化一下书写:
<span style="font-size:18px;">class Weekday2{
private Weekday2(){
}
public final static Weekday2 Sun=new Weekday2(){
public Weekday2 nextday(){
return Mon;
}
};
public final static Weekday2 Mon=new Weekday2(){
public Weekday2 nextday(){
return Sun;
}};
@Override
public String toString(){
return this==Mon?"Monday":"Sunday";
}
}</span>
/*枚举类的基本应用:* 1.创建一个枚举类
* 注:在枚举类中可以定义私有有参数或无参数构造方法
* 1.在枚举类中定义一些元素
* 3.探索枚举类与普通类的区别
* 注:枚举中是元素是枚举类的一个个实例对象
* 经过和自定义枚举类的对比我们可以得出枚举类中的成员相当于普通类中的中的成员变量,但它们的初始化值为该类的一个实例化对象
* */
<span style="font-size:18px;">enum Weekday1{
SUN,MON(2),TUE,WED,THI,FRI,SAT;//(最后的;可要可不要)
private Weekday1(){System.out.println("frist");}
private Weekday1(int a){System.out.println("second");}
}</span>
以上方法的验证结果:
<span style="font-size:18px;">public class EnumStudy {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Weekday weekday1=Weekday.Mon;
System.out.println(weekday1);
System.out.println(weekday1.nextDay());
System.out.println("================Weekday2============");
Weekday weekday3=Weekday.Mon;
System.out.println(weekday3);
System.out.println(weekday3.nextDay());
System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++");
//枚举类的基本应用
Weekday1 weekday=Weekday1.FRI;
Weekday1 weekday2=Weekday1.MON;
System.out.println(weekday);
System.out.println(weekday2);
//总结:从结果上我们可以看出枚举总的无参元素调用的是枚举的无参数构造方法
}
}</span>
注:枚举类是一个class,而且是一个不可被继承的final类,其中的元素都是类静态常量。
枚举类中的常用方法:
构造器:
1)构造器只是在构造枚举值的时候被调用。
2)构造器只有私有private,绝不允许有public构造器。这样可以保证外部代码无法重新构造枚举类的实例。因为枚举值是public static final的常量,但是枚举类的方法和数据域是可以被外部访问的。
3)构造器可以有多个,调用哪个即初始化相应的值。
非静态方法:(所有的枚举类都继承了Enum方法)
1)String toString() ;//返回枚举量的名称
2)int ordinal() ;//返回枚举值在枚举类中的顺序,按定义的顺序排
3)Class getClass() ;//获取对应的类名
4) String name();//返回此枚举常量的名称,在其枚举声明中对其进行声明。
静态方法:
1)valueOf(String e) ;//转为对应的枚举对象,即将字符串转为对象
2)values() ;//获取所有的枚举对象元素
int len=Weekday1.values().length;
Weekday1[] wd=Weekday1.values();
for(int i=0;i<len;i++){
System.out.println(wd[i].name()+"所在位子:"+wd[i].ordinal()+"所属类:"+wd[i].getClass());
}