int chooseNear(int i) {
switch (i) {
case 0:
return 0;
case 1:
return 1;
case 2:
return 2;
default:
return -1;
}
}
最终生成的class文件内容如下:
public class com.test19.Test07
SourceFile: "Test07.java"
minor version: 0
major version: 51
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Methodref #3.#18 // java/lang/Object."<init>":()V
#2 = Class #19 // com/test19/Test07
#3 = Class #20 // java/lang/Object
#4 = Utf8 <init>
#5 = Utf8 ()V
#6 = Utf8 Code
#7 = Utf8 LineNumberTable
#8 = Utf8 LocalVariableTable
#9 = Utf8 this
#10 = Utf8 Lcom/test19/Test07;
#11 = Utf8 chooseNear
#12 = Utf8 (I)I
#13 = Utf8 i
#14 = Utf8 I
#15 = Utf8 StackMapTable
#16 = Utf8 SourceFile
#17 = Utf8 Test07.java
#18 = NameAndType #4:#5 // "<init>":()V
#19 = Utf8 com/test19/Test07
#20 = Utf8 java/lang/Object
{
public com.test19.Test07();
flags: ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 34: 0
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this Lcom/test19/Test07;
int chooseNear(int);
flags:
Code:
stack=1, locals=2, args_size=2
0: iload_1
1: tableswitch { // 0 to 2
0: 28
1: 30
2: 32
default: 34
}
28: iconst_0
29: ireturn
30: iconst_1
31: ireturn
32: iconst_2
33: ireturn
34: iconst_m1
35: ireturn
LineNumberTable:
line 50: 0
line 52: 28
line 54: 30
line 56: 32
line 58: 34
LocalVariableTable:
Start Length Slot Name Signature
0 36 0 this Lcom/test19/Test07;
0 36 1 i I
StackMapTable: number_of_entries = 4
frame_type = 28 /* same */
frame_type = 1 /* same */
frame_type = 1 /* same */
frame_type = 1 /* same */
}