枚举是实例数量已经固定的类
[public] enum 枚举名
{
//第一行列出所有实例 ----枚举以后就只能用这些实例
//同样可以定义类的五大成员
}
与普通类的语法区别:
- 枚举默认已经集成了Enum类(Object的子类),因此枚举不能继承其他类。
- 枚举类默认要么是final类,要么是抽象类。
如果枚举类没有抽象方法,系统自动添加final;如果添加了抽象方法,系统自动添加abstract
注:abstract|final 是隐式添加的,不允许开发者显示添加
- 枚举类的构造器只能用private修饰,构造器不写修饰符(自动添加private)
public enum Season
{
SPRING,SUMMER,AUTUMN,WINTER;
int age = 2 ;
Season()
{
}
public void info()
{
System.out.println("info方法");
}
// 内部接口也是可以有的
public interface InnerInterface
{
}
static public void main(String... args)
{
System.out.println("Hello World!");
}
}
用 javap -c Season 指令得到如下结果
Compiled from "Season.java"
public final class Season extends java.lang.Enum<Season> {
public static final Season SPRING;
public static final Season SUMMER;
public static final Season AUTUMN;
public static final Season WINTER;
int age;
public static Season[] values();// 该方法返回所有枚举实例:SPRING,SUMMER,AUTUMN,WINTER;
Code:
0: getstatic #1 // Field $VALUES:[LSeason;
3: invokevirtual #2 // Method "[LSeason;".clone:()Ljava/lang/Object;
6: checkcast #3 // class "[LSeason;"
9: areturn
public static Season valueOf(java.lang.String);// 该方法根据枚举名返回枚举实例
Code:
0: ldc #4 // class Season
2: aload_0
3: invokestatic #5 // Method java/lang/Enum.valueOf:(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;
6: checkcast #4 // class Season
9: areturn
public void info();
Code:
0: getstatic #8 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #9 // String info方法
5: invokevirtual #10 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
public static void main(java.lang.String...);
Code:
0: getstatic #8 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #11 // String Hello World!
5: invokevirtual #10 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
static {};
Code:
0: new #4 // class Season
3: dup
4: ldc #12 // String SPRING
6: iconst_0
7: invokespecial #13 // Method "<init>":(Ljava/lang/String;I)V
10: putstatic #14 // Field SPRING:LSeason;
13: new #4 // class Season
16: dup
17: ldc #15 // String SUMMER
19: iconst_1
20: invokespecial #13 // Method "<init>":(Ljava/lang/String;I)V
23: putstatic #16 // Field SUMMER:LSeason;
26: new #4 // class Season
29: dup
30: ldc #17 // String AUTUMN
32: iconst_2
33: invokespecial #13 // Method "<init>":(Ljava/lang/String;I)V
36: putstatic #18 // Field AUTUMN:LSeason;
39: new #4 // class Season
42: dup
43: ldc #19 // String WINTER
45: iconst_3
46: invokespecial #13 // Method "<init>":(Ljava/lang/String;I)V
49: putstatic #20 // Field WINTER:LSeason;
52: iconst_4
53: anewarray #4 // class Season
56: dup
57: iconst_0
58: getstatic #14 // Field SPRING:LSeason;
61: aastore
62: dup
63: iconst_1
64: getstatic #16 // Field SUMMER:LSeason;
67: aastore
68: dup
69: iconst_2
70: getstatic #18 // Field AUTUMN:LSeason;
73: aastore
74: dup
75: iconst_3
76: getstatic #20 // Field WINTER:LSeason;
79: aastore
80: putstatic #1 // Field $VALUES:[LSeason;
83: return
}
String name():该方法返回枚举实例的名字。
int ordinal():该方法返回枚举实例的序号(从零开始)。