package com.xiaotang;
public enum AA{
read, black, green
}
static {};
Code:
Stack=4, Locals=0, Args_size=0
0: new #1; //class com/xiaotang/AA
3: dup
4: ldc #14; //String read
6: iconst_0
7: invokespecial #15; //Method "<init>":(Ljava/lang/String;I)V
10: putstatic #19; //Field read:Lcom/xiaotang/AA;
13: new #1; //class com/xiaotang/AA
16: dup
17: ldc #21; //String black
19: iconst_1
20: invokespecial #15; //Method "<init>":(Ljava/lang/String;I)V
23: putstatic #22; //Field black:Lcom/xiaotang/AA;
26: new #1; //class com/xiaotang/AA
29: dup
30: ldc #24; //String green
32: iconst_2
33: invokespecial #15; //Method "<init>":(Ljava/lang/String;I)V
36: putstatic #25; //Field green:Lcom/xiaotang/AA;
39: iconst_3
40: anewarray #1; //class com/xiaotang/AA
43: dup
44: iconst_0
45: getstatic #19; //Field read:Lcom/xiaotang/AA;
48: aastore
49: dup
50: iconst_1
51: getstatic #22; //Field black:Lcom/xiaotang/AA;
54: aastore
55: dup
56: iconst_2
57: getstatic #25; //Field green:Lcom/xiaotang/AA;
60: aastore
61: putstatic #27; //Field ENUM$VALUES:[Lcom/xiaotang/AA;
64: return
private final String name;
private final int ordinal;
public final String name() {
return name;
}
public final int ordinal() {
return ordinal;
}
protected Enum(String name, int ordinal) {
this.name = name;
this.ordinal = ordinal;
}
Code:
Stack=5, Locals=3, Args_size=0
0: getstatic #27; //Field ENUM$VALUES:[Lcom/xiaotang/AA;
3: dup
4: astore_0
5: iconst_0
6: aload_0
7: arraylength
8: dup
9: istore_1
10: anewarray #1; //class com/xiaotang/AA
13: dup
14: astore_2
15: iconst_0
16: iload_1
17: invokestatic #35; //Method java/lang/System.arraycopy: (Ljava/lang/Object;ILjava/lang/Object;II)V
20: aload_2
21: areturn
LineNumberTable:
line 1: 0
Code:
Stack=2, Locals=1, Args_size=1
0: ldc #1; //class com/xiaotang/AA
2: aload_0
3: invokestatic #43; //Method java/lang/Enum.valueOf:(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;
6: checkcast #1; //class com/xiaotang/AA
9: areturn<pre name="code" class="java"> public static <T extends Enum<T>> T valueOf(Class<T> enumType,
String name) {
T result = enumType.enumConstantDirectory().get(name);
if (result != null)
return result;
if (name == null)
throw new NullPointerException("Name is null");
throw new IllegalArgumentException(
"No enum const " + enumType +"." + name);
}
LineNumberTable: line 1: 0
public static <T extends Enum<T>> T valueOf(Class<T> enumType,
String name) {
T result = enumType.enumConstantDirectory().get(name);
if (result != null)
return result;
if (name == null)
throw new NullPointerException("Name is null");
throw new IllegalArgumentException(
"No enum const " + enumType +"." + name);
}
Map<String, T> enumConstantDirectory() {
if (enumConstantDirectory == null) {
T[] universe = getEnumConstantsShared();
if (universe == null)
throw new IllegalArgumentException(
getName() + " is not an enum type");
Map<String, T> m = new HashMap<String, T>(2 * universe.length);
for (T constant : universe)
m.put(((Enum)constant).name(), constant);
enumConstantDirectory = m;
}
return enumConstantDirectory;
}
T[] getEnumConstantsShared() {
if (enumConstants == null) {
if (!isEnum()) return null;
try {
final Method values = getMethod("values");
java.security.AccessController.doPrivileged
(new java.security.PrivilegedAction() {
public Object run() {
values.setAccessible(true);
return null;
}
});
enumConstants = (T[])values.invoke(null);
}
// These can happen when users concoct enum-like classes
// that don't comply with the enum spec.
catch (InvocationTargetException ex) { return null; }
catch (NoSuchMethodException ex) { return null; }
catch (IllegalAccessException ex) { return null; }
}
return enumConstants;
}
public class Test {
public static void main(String[] args) {
switch (AA.black) {
case read:
System.out.println("read");
break;
case black:
System.out.println("black");
break;
case green:
System.out.println("green");
break;
default:
System.out.println("other");
break;
}
}
}
public class Test {
public final static int READ = AA.read.ordinal();
public final static int BLACK = AA.black.ordinal();
public final static int GREEN = AA.green.ordinal();
public static void main(String[] args) {
switch (AA.read.ordinal()) {
case READ:
System.out.println("read");
break;
case BLACK:
System.out.println("black");
break;
case GREEN:
System.out.println("green");
break;
default:
System.out.println("other");
break;
}
}
}
Compiled from "Test.java"
public class com.xiaotang.Test extends java.lang.Object{
private static int[] $SWITCH_TABLE$com$xiaotang$AA;
public com.xiaotang.Test();
public static void main(java.lang.String[]);
static int[] $SWITCH_TABLE$com$xiaotang$AA();
}
static int[] $SWITCH_TABLE$com$xiaotang$AA();
Code:
Stack=3, Locals=1, Args_size=0
0: getstatic #53; //Field $SWITCH_TABLE$com$xiaotang$AA:[I
3: dup
4: ifnull 8
7: areturn
8: pop
9: invokestatic #55; //Method com/xiaotang/AA.values:()[Lcom/xiaotang/AA;
12: arraylength
13: newarray int
15: astore_0
16: aload_0
17: getstatic #59; //Field com/xiaotang/AA.black:Lcom/xiaotang/AA;
20: invokevirtual #27; //Method com/xiaotang/AA.ordinal:()I
23: iconst_2
24: iastore
25: goto 29
28: pop
29: aload_0
30: getstatic #61; //Field com/xiaotang/AA.green:Lcom/xiaotang/AA;
33: invokevirtual #27; //Method com/xiaotang/AA.ordinal:()I
36: iconst_3
37: iastore
38: goto 42
41: pop
42: aload_0
43: getstatic #21; //Field com/xiaotang/AA.read:Lcom/xiaotang/AA;
46: invokevirtual #27; //Method com/xiaotang/AA.ordinal:()I
49: iconst_1
50: iastore
51: goto 55
54: pop
55: aload_0
56: dup
57: putstatic #53; //Field $SWITCH_TABLE$com$xiaotang$AA:[I
60: areturn
public int [] $SWITCH_TABLE$com$xiaotang$AA(){
if($SWITCH_TABLE$com$xiaotang$AA==null)
{
int[] array = new int[AA.values().length];
array[AA.black.ordinal()] = 2;
array[AA.green.ordinal()] = 3;
array[AA.read.ordinal()] = 1;
$SWITCH_TABLE$com$xiaotang$AA=array;
}
return $SWITCH_TABLE$com$xiaotang$AA;
}
public static void main(String[] args) {
switch (AA.read) {
case read:
System.out.println("read");
break;
case black:
System.out.println("black");
break;
case green:
System.out.println("green");
break;
default:
System.out.println("other");
break;
}
Code:
Stack=2, Locals=1, Args_size=1
0: invokestatic #18; //Method $SWITCH_TABLE$com$xiaotang$AA:()[I
3: getstatic #21; //Field com/xiaotang/AA.read:Lcom/xiaotang/AA;
6: invokevirtual #27; //Method com/xiaotang/AA.ordinal:()I
9: iaload
10: tableswitch{ //1 to 3
1: 36;
2: 47;
3: 58;
default: 69 }
36: getstatic #31; //Field java/lang/System.out:Ljava/io/PrintStream;
39: ldc #37; //String read
41: invokevirtual #38; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
44: goto 77
47: getstatic #31; //Field java/lang/System.out:Ljava/io/PrintStream;
50: ldc #44; //String black
52: invokevirtual #38; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
55: goto 77
58: getstatic #31; //Field java/lang/System.out:Ljava/io/PrintStream;
61: ldc #46; //String green
63: invokevirtual #38; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
66: goto 77
69: getstatic #31; //Field java/lang/System.out:Ljava/io/PrintStream;
72: ldc #48; //String other
74: invokevirtual #38; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
77: return
public enum AA {
read(100), black("sdaf"), green;
private AA(int red) {
}
private AA() {
}
private AA(String ss) {
}
}
Compiled from "AA.java"
public final class com.xiaotang.AA extends java.lang.Enum{
public static final com.xiaotang.AA read;
public static final com.xiaotang.AA black;
public static final com.xiaotang.AA green;
private static final com.xiaotang.AA[] ENUM$VALUES;
static {};
private com.xiaotang.AA(java.lang.String, int, int);
private com.xiaotang.AA(java.lang.String, int);
private com.xiaotang.AA(java.lang.String, int, java.lang.String);
public static com.xiaotang.AA[] values();
public static com.xiaotang.AA valueOf(java.lang.String);
}