आजकल लगभग किसी भी ऑब्जेक्ट-ओरिएंटेड भाषा में एक्सेप्शन हैंडलिंग फीचर मौजूद है। C++ और Java में भी हम इस तरह की सुविधा प्राप्त कर सकते हैं। C++ में एक्सेप्शन हैंडलिंग और Java में एक्सेप्शन हैंडलिंग के बीच कुछ समानताएं हैं, जैसे दोनों भाषाओं में हमें try-catch ब्लॉक का उपयोग करना होता है। हालांकि कुछ कठिनाइयां भी हैं। ये नीचे दी गई हैं -
C++ में, हम किसी भी प्रकार के डेटा को एक्सेप्शन के रूप में थ्रो कर सकते हैं। किसी भी प्रकार के डेटा का अर्थ है प्रिमिटिव डेटाटाइप्स और पॉइंटर्स भी। Java में हम केवल थ्रोएबल ऑब्जेक्ट्स थ्रो कर सकते हैं। किसी भी थ्रोएबल क्लास की सबक्लास भी थ्रोएबल होगी।
उदाहरण
#include <iostream>
using namespace std;
int main() {
int x = -5;
try { // संरक्षित कोड
if (x < 0) {
throw x;
}
}
catch (int x) {
cout << "Exception Caught: thrown value is " << x << endl;
}
return 0;
}
आउटपुट
Exception Caught: thrown value is -5
C++ में, कैच-ऑल नामक एक विकल्प है जो किसी भी प्रकार के एक्सेप्शन को पकड़ने के लिए है। सिंटैक्स नीचे जैसा है -
try {
// संरक्षित कोड
} catch(...) {
// किसी भी प्रकार के एक्सेप्शन को पकड़ें
}
उदाहरण
#include <iostream>
using namespace std;
int main() {
int x = -5;
char y = 'A';
try { // संरक्षित कोड
if (x < 0) {
throw x;
}
if (y == 'A') {
throw y;
}
}
catch (...) {
cout << "Exception Caught" << endl;
}
return 0;
}
आउटपुट
Exception Caught
Java में यदि हम किसी भी प्रकार के एक्सेप्शन को पकड़ना चाहते हैं, तो हमें Exception क्लास का उपयोग करना होगा। जो Java में मौजूद किसी भी एक्सेप्शन की सुपर क्लास है, या कुछ यूजर डिफाइंड एक्सेप्शन भी। सिंटैक्स नीचे जैसा है -
try {
// संरक्षित कोड
} catch(Exception e) {
// किसी भी प्रकार के एक्सेप्शन को पकड़ें
}
C++ में कोई फाइनली ब्लॉक नहीं है। लेकिन Java में एक विशेष ब्लॉक है जिसे फाइनली कहा जाता है। यदि हम फाइनली ब्लॉक में कुछ कोड लिखते हैं, तो यह हमेशा निष्पादित होगा। यदि try ब्लॉक बिना किसी त्रुटि के निष्पादित होता है, या एक्सेप्शन होता है, तो फाइनली हर समय निष्पादित होगा।
Java के लिए
उदाहरण
public class HelloWorld {
public static void main(String[] args) {
try {
int data = 25/5;
System.out.println(data);
} catch(NullPointerException e) {
System.out.println(e);
} finally {
System.out.println("finally block is always executed");
}
System.out.println("rest of the code...");
}
}
आउटपुट
5 finally block is always executed rest of the code...