সেরা প্রোগ্রামারও কোডে ভুল করেন। এরর টাইপো, অনাকাঙ্ক্ষিত ইউজার ইনপুট, বা অন্যান্য trak করা কঠিন কারণগুলো로 হতে পারে। তাই এক্সসেপশন হ্যান্ডলিং দরকার। ভালো কোডে এক্সসেপশন হ্যান্ডলার থাকে যা এরর হলে প্রিডিফাইনড উপায়ে প্রতিক্রিয়া জানায়। এক্সসেপশন হ্যান্ডলার প্রোগ্রামকে বলে দেয় এরর হলে কী করবে।
জাভায় try...catch ব্লক এক্সসেপশন হ্যান্ডলিংয়ে ব্যবহৃত হয়। এই টিউটোরিয়ালে এক্সসেপশন হ্যান্ডলিং বেসিকস, try...catch ব্লক ব্যবহার, finally স্টেটমেন্ট ব্যবহার এবং উদাহরণ আলোচনা করা হয়েছে।
জাভা Exceptions
এক্সসেপশন হলো প্রোগ্রাম এক্সিকিউশন সময় অপ্রত্যাশিত ইভেন্ট। এটি প্রোগ্রামের ফ্লো বাধা দেয় এবং প্রোগ্রাম পুরো হওয়ার আগে থেমাতে পারে। এক্সসেপশন অনেক কারণের জন্য হয়: সার্ভার এক্সেস না হওয়া, কোড এরর, টাইপো, অস্তিত্বহীন ফাইল খোলা, ভুল ইউজার ইনপুট, ইত্যাদি।
Error মেসেজ এক্সসেপশন থেকে আলাদা। Error মানে প্রোগ্রাম যেভাবে রিকভার করতে পারে না এমন কন্ডিশন (যেমন মেমরি শেষ)। ডেভেলপাররা সাধারণত Error হ্যান্ডল করে না। কিন্তু এক্সসেপশন হ্যান্ডল করা যায়। এক্সসেপশন رفع হলে একটি exception object তৈরি হয় যাতে এক্সসেপশনের নাম, কোথায় رفع হয়েছে সেটি থাকে।
Try Catch Java
try...catch স্টেটমেন্ট জাভায় এক্সসেপশন হ্যান্ডল করতে ব্যবহৃত হয়। কোড ব্লককে try_catch ব্লকে রাখা হয়। প্রোগ্রাম try_catch ব্লক পেলে try ব্লকের কোড এক্সিকিউট করে। এক্সসেপশন رفع হলে catch ব্লকের কোড তৎক্ষণাৎ এক্সিকিউট হয়। catch ব্লক try ব্লকের পরেই থাকতে হয়। সিনট্যাক্স:
try { // Code to run } catch (ExceptionType error) { // Code to run when exception is raised } finally { // Code to run even if exception is not raised } finally ব্লক পরে আলোচনা করব, এখন try_catch ফোকাস। উদাহরণ দিয়ে ব্যাখ্যা করি।
Try Catch Java Example
মনে করুন, studentNames অ্যারে থেকে ৫ম নাম প্রিন্ট করতে চাই। কিন্তু ক্লাসে ৬ জন ছাত্র। এটি এরর দেবে কারণ ইনডেক্স ৫ (৬ষ্ঠ ছাত্র, ইনডেক্স ০ থেকে) অস্তিত্ব নেই।
class Main { public static void main(String[] args) { String[] studentNames = {"Linda", "Greg", "Ron", "Graham", "Alexis"}; System.out.println(studentNames[5]); } আউটপুট: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5 at Main.main(Main.java:4)লং এরর মেসেজ এসেছে। এখন
try...catch দিয়ে হ্যান্ডেল করি। এরর হলে "There was an error." প্রিন্ট করব। class Main { public static void main(String[] args) { try { String[] studentNames = {"Linda", "Greg", "Ron", "Graham", "Alexis"}; System.out.println(studentNames[5]); } catch (Exception e) { System.out.println("There was an error."); } } আউটপুট: There was an error.একাধিক
catch ব্লকও ব্যবহার করা যায়। প্রতিটি এক্সসেপশন আলাদা হ্যান্ডেল করতে। উপরে ArrayIndexOutOfBoundsException رفع হয়েছিল। সেটি স্পেসিফিক্যালি টেস্ট করলে: class Main { public static void main(String[] args) { try { String[] studentNames = {"Linda", "Greg", "Ron", "Graham", "Alexis"}; System.out.println(studentNames[5]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("ArrayIndexOutOfBoundsException was raised."); } catch (Exception e) { System.out.println("There was an error."); } } } আউটপুট: ArrayIndexOutOfBoundsException was raised.অন্য এরর হলে জেনেরিক
Exception e catch ব্লক চলে।
Finally Statement
finally স্টেটমেন্ট try...catch ব্লক এক্সিকিউশনের পর কোড এক্সিকিউট করতে ব্যবহৃত হয়। finally ব্লক অপশনাল, কিন্তু ডিফাইন থাকলে সবসময় এক্সিকিউট হয়। এক্সসেপশন না থাকলে try ব্লকের পর, এক্সসেপশন থাকলে catch ব্লকের পর। উদাহরণ: "This block has finished executing" প্রিন্ট করি।
class Main { public static void main(String[] args) { try { String[] studentNames = {"Linda", "Greg", "Ron", "Graham", "Alexis"}; System.out.println(studentNames[5]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("ArrayIndexOutOfBoundsException was raised."); } catch (Exception e) { System.out.println("There was an error."); } finally { System.out.println("This block of code has finished executing."); } } } আউটপুট: ArrayIndexOutOfBoundsException was raised. This block of code has finished executing.
finally ব্লক catch ব্লকের পর এক্সিকিউট হয়েছে।
উপসংহার
try...catch ব্লক জাভায় এক্সসেপশন গ্রেসফুলি হ্যান্ডল করতে ব্যবহৃত হয়। try ব্লক এক্সিকিউট হয়, এক্সসেপশন رفع হলে সংশ্লিষ্ট catch ব্লক এক্সিকিউট হয়। finally স্টেটমেন্ট try...catch ব্লকের পর এক্সিকিউট হয়, এক্সসেপশন না থাকলেও। এই টিউটোরিয়ালে try...catch ব্লক ও finally ব্লক ব্যবহারের উদাহরণ দেওয়া হয়েছে। এখন আপনি আত্মবিশ্বাসের সাথে জাভায় এক্সসেপশন হ্যান্ডল করতে পারবেন!