枚举,感觉搞的有点混乱,不太好理解。
要好使的话,最好还是按照最基础的功能使用,不要搞什么叽歪了。
否则得把人搅浑了去。
package mypackage;
//在Java中,枚举其实也是一个类
//所有的枚举类型,都是Enum的子类,只是不需要显示extends,就好比所有的类都是Object的子类一样
public enum Size
{
//类中都是类的实例
// Small,
// Medium,
// Large,//并且,枚举值之间还是只能使用逗号来分隔
/*MoreLarge;*//*,如果枚举类中没有定义其它的东西,只有枚举,用逗号不会报错;
但要定义其它的时候,就得用分号了,难道表示上边是一条执行语句?
可Java不是说没有逗号语句呗!*/
Small(1),
Medium(2),
Large(3);
//在枚举类中可以定义实例域和方法、构造器
private int m_iValue;
private/*public*/ Size(int i)//枚举的构造器只能是private,其它的都会报错
{//需要注意的是,一旦定义了构造器,则枚举实例即(Small、Medium、Large)就必须使用构造器进行实例化,否则会报错
//并且,这几个实例还必须得要放在枚举定义的开头,以分号;结束,否则也会报错,不明白这个语法是为了什么?
//既然是实例化,在哪不行,而且构造器还必须是private
m_iValue = i;
}
public int getValue()
{
return m_iValue;
}
}
在实际应用的时候,最诡异了:
// Size size = new Size();//枚举是不可以用来实例化的,编译器会报错
System.out.println(Size.Large);//这个的结果和下边toString的结果是一样的,莫非是默认实现了?
System.out.println(Size.Large.toString());
System.out.println(Size.values());//values可以返回所有的枚举,是个实例数组
//还可以设置枚举的值,只不过是通过Enum的静态方法
Size z = Enum.valueOf(Size.class, "Small");//这个就不是实例化了?
System.out.println(z);
最不明白的就是,既然是类,不能实例化,但又可以有变量可以引用,这太诡异了。