एक त्रुटि इंगित करता है कि कार्यक्रम में कोई समस्या है। एक अपवाद एक विशिष्ट निर्माण है जो प्रोग्राम के नियंत्रण प्रवाह में बाधा डालता है, और ढेर को खोलता है, ढेर की स्थिति के बारे में जानकारी कैप्चर करता है ताकि इसकी सूचना दी जा सके।
एक अपवाद एक त्रुटि इंगित करने के लिए इस्तेमाल किया जा सकता, लेकिन हमेशा नहीं।उदाहरण के लिए:
void startOperation() {
try {
while (someComplexOperationIsOnGoing()) {
checkRestart();
}
}
catch (RestartException re) {
startOperation();
}
}
void checkRestart() {
if (shouldRestart()) {
throw new RestartException();
}
}
यह अपूर्ण कोड नमूना एक ऐसा मामला दिखाने के लिए है जहां कोई अपवाद त्रुटि नहीं है। यह हमेशा सर्वोत्तम अभ्यास नहीं है; लेकिन इसका उपयोग कुछ मामलों में किया जाता है जहां इरादा प्रोग्राम में गहराई से नियंत्रण प्रवाह को बाधित करना है (जैसे वेब फ्रेमवर्क में पृष्ठ को रीडायरेक्ट करना, HTTP अनुरोध का जवाब देते समय) और स्टैक के उच्च-स्तर स्तर पर नियंत्रण वापस करना । शब्द अपवाद उस तंत्र को संदर्भित करता है जो प्रोग्राम को बाधित करता है।
जावा में, अपवाद कक्षा है जो इस व्यवहार को समाहित करती है। त्रुटि कक्षा भी एक अपवाद के रूप में नियंत्रण प्रवाह में बाधा डालती है; लेकिन यह केवल गंभीर, अप्राप्य समस्याओं के लिए आरक्षित है जो रनटाइम पर होते हैं। इसका उपयोग किया जाता है, उदाहरण के लिए, जब JVM स्मृति से बाहर हो जाता है और नई ऑब्जेक्ट्स नहीं बना सकता है।
@ सभी: हम 'अनुमोदित समय अपवाद 'क्यों कहते हैं और' संकलित-समय त्रुटि 'नहीं,' चेक अपवाद 'के रूप में क्यों ?? –
एक अपवाद हमेशा कार्यक्रम के साथ एक समस्या नहीं है। 'अपवाद' शब्द का कंप्यूटर प्रोग्राम के संदर्भ में एक विशिष्ट तकनीकी अर्थ है। मैंने जो स्पष्टीकरण पोस्ट किया है उसे देखें। – RMorrisey