এক্সসেপশন হ্যান্ডলিং (exception handling) ফিচার প্রায় সকল অবজেক্ট-ওরিয়েন্টেড ল্যাঙ্গুয়েজে আজকাল পাওয়া যায়। C++ এবং Java-এও এই ফিচার রয়েছে। C++ এবং Java-র এক্সসেপশন হ্যান্ডলিংয়ে কিছু সাদৃশ্য রয়েছে, যেমন উভয় ভাষায় try-catch ব্লক ব্যবহার করতে হয়। তবে কিছু পার্থক্যও রয়েছে। নিচে সেগুলো আলোচনা করা হলো:
C++-এ, আমরা যেকোনো টাইপের ডেটা এক্সসেপশন হিসেবে থ্রো (throw) করতে পারি। যেকোনো টাইপ মানে প্রিমিটিভ ডেটা টাইপ এবং পয়েন্টারও। Java-এ শুধু থ্রোয়েবল (throwable) অবজেক্ট থ্রো করা যায়। যেকোনো থ্রোয়েবল ক্লাসের সাবক্লাসও থ্রোয়েবল হবে।
উদাহরণ কোড (C++)
#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;
}
}
আউটপুট
Exception Caught: thrown value is -5
C++-এ, সব ধরনের এক্সসেপশন ক্যাচ করার জন্য 'catch all' অপশন রয়েছে। সিনট্যাক্স নিচের মতো:
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;
}
}
আউটপুট
Exception Caught
Java-এ যদি যেকোনো টাইপের এক্সসেপশন ক্যাচ করতে চাই, তবে Exception ক্লাস ব্যবহার করতে হয়। যা Java-এ উপস্থিত যেকোনো এক্সসেপশনের সুপার ক্লাস, অথবা কিছু ইউজার ডিফাইন এক্সসেপশনও। সিনট্যাক্স:
try {
// প্রোটেক্টেড কোড
} catch(Exception e) {
// যেকোনো টাইপের এক্সসেপশন ক্যাচ
}
C++-এ finally ব্লক নেই। কিন্তু Java-এ finally নামক একটি বিশেষ ব্লক রয়েছে। যদি আমরা finally ব্লকে কিছু কোড লিখি, তবে সেটি সবসময় এক্সিকিউট হবে। try ব্লক ইরর ছাড়া এক্সিকিউট হোক অথবা এক্সসেপশন হোক, finally সবসময় এক্সিকিউট হবে।
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...