http://blog.csdn.net/pnuts/article/details/4039606
1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例。
虽然enum不可以有public的构造函数,但是我们还是可以定义private的构造函数,在enum内部使用。构造函数不能为public或者protected, 从而保证构造函数只能在内部使用,客户代码不能new一个枚举值的实例出来。这也是完全符合情理的,因为我们知道枚举值是public static final的常量而已。
<span style="font-size:14px;">public enum Color
{
Red("This is Red"), Green("This is Green"), Blue("This is Blue");
private String desc;
Color(String desc)
{
this.desc = desc;
}
public String getDesc()
{
return this.desc;
}
} </span>
2.所有枚举值都是public , static , final的。注意这一点只是针对于枚举值,我们可以和在普通类里面定义 变量一样定义其它任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。
3.Enum默认实现了java.lang.Comparable接口。
4.Enum覆载了了toString方法,因此我们如果调用Color.Blue.toString()默认返回字符串”Blue”.
5.Enum提供了一个valueOf方法,这个方法和toString方法是相对应的。调用valueOf(“Blue”)将返回Color.Blue.因此我们在自己重写toString方法的时候就要注意到这一点,一把来说应该相对应地重写valueOf方法。
<span style="font-size:14px;">Size s=Enum.valueof(Size.class,"SMALL");</span>
6.Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值。
<span style="font-size:14px;">for (Color c: Color.values())
System.out.println(“find value:” + c);
private static int number = Color.values().length ;//可以获得长度
</span>
7.Enum还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定,这里Color.Red.ordinal()返回0。 序号从0开始。
8, Java要求必须先定义枚举实例。
http://blog.csdn.net/qq_19439251/article/details/39972639
1,为什么要有枚举?
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。
枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
2,自定义类实现枚举功能
1、私有的构造方法。
2、每个元素分别用一个公有的静态成员变量表示。
3、可以自定义若干个公有方法或抽象方法。
4、 enum类型虽然不能够继承自其它基类,但是可以实现其它接口, 继承抽象类
5、若枚举类只有一个枚举值,则可以当作单例设计模式使用
单例设计模式(Singleton):
解决一个类在内存中只存在一个对象,比如对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。单例设计模式之饿汉式,Single类一进内存,就已经创建好了对象,简单的说就是一上来就吃。
想要保住对象的唯一。
-
1,为了避免其他程序过多建立该类对象。先禁止其他程序建立该类对象。
2,还为了让其他程序还可以访问到该类对象。只好在本类中 ,自定义一个对象。
3,为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
这三不这么用代码体现呢?
1,将构造函数私有化,
2,在类中创建一个本类对象。
3,提供一个方法可以获取到该对象。
对于事物该这么描述。还这么描述。
当需要将该事物的对象保证在内存中的唯一时。就就以上三步加上即可。