----------------------android培训、java培训、期待与您交流! --------------------
枚举
1、枚举是什么?
枚举的定义:枚举也就是一个类,就是让某一个引用类型的变量的取值在一些固定的取值范围之内,它是一个常量。他的每一个元素就相当于他的一个实例对象。但是枚
举他自身是不能创建对象的,因为他的构造函数式
例如:我们常说的春、夏、秋、冬就是固定不变的,这时候我们就需要用一些常量来表示,我们就要用到了枚举。
2、枚举的作用??
可以让编译器在编译的时候就可以控制程序不能填写非法值,一般的定义变量的方式无法实现这个作用。
3、枚举是怎么创建的?
3.1用一般类是怎么实现枚举的?
public class ColorTest
{
public static void main(String[] args)
{
Color color1=Color.RED;
Color color2=Color.GREEN;
Color color3=Color.BLUE;
System.out.println(color1.getName());
System.out.println(color2.getName());
System.out.println(color3.getName());
}
}
public class Color
{
private String name;
private Color(String name)
{
this.setName(name);
}
//在本类中穿件实例对象
public static final Color RED=new Color("hong");
public static final Color GREEN=new Color("lu");
public static final Color BLUE=new Color("lan");
public String getName()// 获取当前的颜色名称
{
return name;
}
public void setName(String name) //设置当前颜色的名称
{
this.name = name;
}
}
以上程序将Color 类中的构造方法私有了,之后在类中准备了若干个实例化对象,以后要取得Color 类的实例则 只能用RED,GREEN,BLUE三个对象,这样就有效的控制了对象的取得范围。
3.2在java中枚举的实现方式
public enum WeekDay1//java在enum中低层自动锁调用toString()等方法;
{
//带有构造函数的枚举 构造函数应该被私有
SUN,MON,TUE,SAT;
private WeekDay1(){System.out.println(1);};
private WeekDay1(int a){System.out.println(2);}
}
注意:在定义枚举元素的时候,必须定义在他的首行,中间用逗号隔开,最后用分号结束
思考:当我们的枚举元素只有一个的时候,可以把它弄成是单例设计模式???
3.3 取得枚举的信息
ordinal 则会从 0 开始依次进行编号,之后可以使用Enum 提供的name() 和ordinal() 方法获取名称和编号。
3.4 通过构造方法为属性赋值:
每个枚举类中都有其指定好的若干对象,当然每一个枚举类对象中也可以包含多个属性。而这些属性也可以通过 构造方法为其赋值。
通过构造方法为枚举元素赋值:
class ConstructorEnum
{
publci static void main(String[] args)
{
for(Color c:Color.values())
{
System.out.println(c.ordinal()+":::"+c.name()+c.getName());
}
}
}
//在这个例子中,c.ordinal()返回的就是枚举时候的顺序,c.name()返回的枚举元素的名称,c.getName() //返回的是我们给他所穿进去的值
enum Color
{
RED,GREEN,BIUE;
private String name;
private Color(String name){this.setName(name);}
public String getName(){return name;}
public void setName(){this.name=name;}
}
知识小扩展:枚举本身已经implements了Comparable接口,他自身是具备比较性的。所以我们将其传入TreeSet 集合的时候他已经给其排序了