public class Strange1 {
public static void main(String[] args) {
try {
Missing m = new Missing();
} catch (java.lang.NoClassDefFoundError ex) {
System.out.println("Got it!");
}
}
}
public class Strange2 {
public static void main(String[] args) {
Missing m;
try {
m = new Missing();
} catch (java.lang.NoClassDefFoundError ex) {
System.out.println("Got it!");
}
}
}
class Missing {
Missing() { }
}
आप Missing.class
को हटाने के बाद Strange1 और Strange2 चलाते हैं, Strange1 NoClassDefFoundError;
फेंक देते हैं लेकिन Strange2 समझ गए प्रिंट होगा!ट्रिकी कोशिश पकड़ जावा कोड
किसी को भी है कि व्याख्या कर सकते हैं? धन्यवाद।
अद्यतन:
Strange1
के लिए जावा बाईटकोड:
0 new info.liuxuan.test.Missing [16]
3 dup
4 invokespecial info.liuxuan.test.Missing() [18]
7 astore_1 [m]
8 goto 20
11 astore_1 [ex]
12 getstatic java.lang.System.out : java.io.PrintStream [19]
15 ldc <String "Got it!"> [25]
17 invokevirtual java.io.PrintStream.println(java.lang.String) : void [27]
20 return
Exception Table:
[pc: 0, pc: 8] -> 11 when : java.lang.NoClassDefFoundError
Line numbers:
[pc: 0, line: 14]
[pc: 11, line: 15]
[pc: 12, line: 16]
[pc: 20, line: 18]
Local variable table:
[pc: 0, pc: 21] local: args index: 0 type: java.lang.String[]
[pc: 8, pc: 11] local: m index: 1 type: info.liuxuan.test.Missing
[pc: 12, pc: 20] local: ex index: 1 type: java.lang.NoClassDefFoundError
Strange2
के लिए जावा बाईटकोड:
11 astore_1 [ex]
:
0 new info.liuxuan.test.Missing [16]
3 dup
4 invokespecial info.liuxuan.test.Missing() [18]
7 astore_1 [m]
8 goto 20
11 astore_2 [ex]
12 getstatic java.lang.System.out : java.io.PrintStream [19]
15 ldc <String "Got it!"> [25]
17 invokevirtual java.io.PrintStream.println(java.lang.String) : void [27]
20 return
Exception Table:
[pc: 0, pc: 8] -> 11 when : java.lang.NoClassDefFoundError
Line numbers:
[pc: 0, line: 15]
[pc: 11, line: 16]
[pc: 12, line: 17]
[pc: 20, line: 19]
Local variable table:
[pc: 0, pc: 21] local: args index: 0 type: java.lang.String[]
[pc: 8, pc: 11] local: m index: 1 type: info.liuxuan.test.Missing
[pc: 12, pc: 20] local: ex index: 2 type: java.lang.NoClassDefFoundError
केवल एक जगह अलग है नहीं है
और
11 astore_2 [ex]
फिर से अद्यतन:
हर कोई ग्रहण में यह कोशिश कर सकते हैं।
अंतर देखने के लिए उत्पन्न बाइटकोड देखें। – Thilo
वे दोनों प्रिंट "इसे मिला!" मेरे लिए। –
"हटाएं" से आपका क्या मतलब है? अगर यह संकलन समय पर मौजूद नहीं है तो इसे संकलित भी नहीं करना चाहिए। अधिक विशिष्ट होने के लिए कृपया अपना प्रश्न संपादित करें। इसके अलावा, शीर्षक का सवाल इस सवाल के संबंध में कुछ भी नहीं है - क्या आप इसे और अधिक विशिष्ट बनाने के लिए भी संपादित कर सकते हैं? –