संकेत: डीबगर किसी भी तरह से जानता है कि कौन से वर्ग हैं। तो आप भी कर सकते हैं!
दो गुमनाम वर्गों के साथ इस उदाहरण पर javap
उपयोग करके देखें:
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);}};
}
}
यह संकलित करें और चलाने के 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
}
आप देख सकते हैं, प्रथम श्रेणी के नाम Test$1
मिला है, दूसरा एक - Test$2
। उम्मीद है कि टैट मदद करता है।
अधिक विशिष्ट जानकारी के लिए, आप रुचि रखने वाले विशिष्ट वर्गों को कम करें, उदा। javap -c -l Test\$2
। रेखा संख्याओं पर ध्यान दें: वे आपको एक संकेत देंगे कि स्रोत फ़ाइल में कक्षा को परिभाषित किया गया था।