Gợi ý: trình gỡ rối bằng cách nào đó biết lớp nào là ở đâu. Vì vậy, bạn có thể, quá!
Hãy thử sử dụng javap
trên ví dụ này với hai lớp vô danh:
import java.util.*;
public class Test {
public static void main(String [] args) {
Map m = new HashMap(){{System.out.print(1);}};
Map m1 = new HashMap(){{System.out.print(2);}};
}
}
Biên dịch và chạy javap -c -l
:
$ javap -c -l Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 3: 0
public static void main(java.lang.String[]);
Code:
0: new #2; //class Test$1
3: dup
4: invokespecial #3; //Method Test$1."<init>":()V
7: astore_1
8: new #4; //class Test$2
11: dup
12: invokespecial #5; //Method Test$2."<init>":()V
15: astore_2
16: return
LineNumberTable:
line 5: 0
line 7: 8
line 9: 16
}
Như bạn có thể thấy, lớp đầu tiên có tên Test$1
, điều thứ hai - Test$2
. Hy vọng tat giúp.
Để biết thêm thông tin cụ thể, hãy dịch ngược các lớp cụ thể mà bạn quan tâm, ví dụ: javap -c -l Test\$2
. Hãy chú ý đến số dòng: chúng sẽ cho bạn một gợi ý về vị trí trong tệp nguồn mà lớp đã được định nghĩa.