क्लास.forनाम() क्लास नॉटफाउंड अपवाद को फेंकता है और जब यह NoClassDefFoundError फेंकता है, तो प्लेटफार्मों में अंतर देख रहा हूं। क्या यह व्यवहार कहीं भी अच्छी तरह परिभाषित है, या क्या मैंने एक बग में ठोकर खाई है?पूंजीकरण और NoClassDefFoundError बनाम ClassNotFoundException
निम्नलिखित कोड पर विचार करें (जो डिफ़ॉल्ट पैकेज में एक स्टैंडअलोन जावा फ़ाइल है):
public class DLExceptionType {
private static void printFindError(String name) {
System.out.print(name + ": ");
try {
Class.forName(name);
System.out.println("** no error **");
} catch (Throwable e) {
System.out.println(e);
}
}
public static void main(String[] args) {
printFindError("DLExceptionType");
printFindError("dLExceptionType"); // note the mis-capitalization
}
}
कोड लिनक्स पर उम्मीद उत्पादन का उत्पादन:
[eos18:~]$ java -version DLExceptionType
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
[eos18:~]$ java DLExceptionType
DLExceptionType: ** no error **
dLExceptionType: java.lang.ClassNotFoundException: dLExceptionType
यह एक अलग पैदा करता है, लेकिन समझने योग्य, विंडोज पर आउटपुट:
java version "1.7.0_01"
Java(TM) SE Runtime Environment (build 1.7.0_01-b08)
Java HotSpot(TM) Client VM (build 21.1-b02, mixed mode, sharing)
Y:\Temp>java DLExceptionType
DLExceptionType: ** no error **
dLExceptionType: java.lang.NoClassDefFoundError: dLExceptionType (wrong name: DLExceptionType)
विंडोज़ पर आउटपुट समझ में आता है: बेका फ़ाइल सिस्टम का उपयोग केस संवेदनशील नहीं है, JVM फ़ाइल dLExceptionType.class लोड करता है, लेकिन उस फ़ाइल में एक अलग नाम वाला वर्ग होता है: DLExceptionType
हालांकि, जब मैक पर कोड चलाता हूं (जिसमें केस-संवेदी है फाइल सिस्टम और लिनक्स बॉक्स से एक नए JVM) मैं Windows के रूप में ही उत्पादन प्राप्त करें:
$ java -version
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11-402-10M3527)
Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02-402, mixed mode)
$ java DLExceptionType
DLExceptionType: ** no error **
dLExceptionType: java.lang.NoClassDefFoundError: dLExceptionType (wrong name: DLExceptionType)
मुझे दूसरे दिन एक गिट रेपो फ़ाइल के साथ एक मामला मुद्दा था; ओएस एक्स में यह एक ही फाइल के रूप में 'foo.rb' और' Foo.rb' का इलाज कर रहा था। बैश अंतर जानता था। –