枚举类本身是“类”,不能作为局部变量声明,但是定义时又像简单的变量
enum Size{a,b,c}
enum Age{d,e,f};
一般 "class 类"时,没有分号,而普通语句有分号,枚举倒是奇怪,加不加都不报错。
枚举类括号里的不是变量,而是类的实例,名称和普通变量一样,不能由数字开头
Object的equals()方法的本意为确定两个对象的引用是否相同,在String,Date,File等方法中被重写,表达为判断 类型+内容是否相等
判断两个枚举类型的值是否相等,不能使用equal,而要用“==”(这个后面看了Object和类部分,再回头思考一下)
enum Size{
SAMLL(),MID(),BIG()
}
这样也可以,这三个都是Size类的静态常量,根本上等同于:
class Size{
public static final Size SAMLL=new Size();
public static fianl Size MID=new Size();
public static final Size BIG=new Size();
}
public static void main(String[] args) throws IOException {
Size s=Size.BIG;
}
enum Size{
SAMLL,MID,BIG;
Size(){
System.out.println(w);
}
public int w=1;
}
在定义Size s时,构造函数执行了3次,(输出3个1),证明确实和静态变量一样可以自定义构造函数:
public class JavaBase1 {
public static void main(String[] args) throws IOException {
Size s=Size.BIG;
s.print();
}
}
enum Size{
SAMLL(1),MID(2),BIG(3);
Size(int i){
w=i;
}
public int w=1;
public void print(){
System.out.println(w);
}
}
此时没有了默认构造函数,SAMLL这些静态对象必须与构造函数一致,也可以定义多个构造函数,3个静态对象采取不同的构造函数。所有枚举类型是Enum的子类,所以Enum s= Size.SAMLL也可以
Size[] s=Size.values(); 返回所有枚举类对象数组
在编译后,无法再实例化其他枚举类对象,当做几个固定的常量使用
Sysout时会自动调用toString方法(枚举转String),而它的逆方法:String,转枚举:Size s=Enum.valueOf(Size.class,"SMALL");
Size s=Size.BIG;
System.out.println(s.ordinal());//返回BIG的位置,从0算起,是2