Java Exception Handling Examples

Java Technologies - জাভা উদাহরন (Java  Examples)
159
159

Java তে Exception Handling একটি গুরুত্বপূর্ণ প্রক্রিয়া যা আপনাকে প্রোগ্রাম চলাকালীন ত্রুটি বা সমস্যা (exception) সামাল দিতে সাহায্য করে। Java তে try-catch, throw, throws, এবং finally এর মতো কন্ট্রোল স্টেটমেন্ট ব্যবহার করে Exception Handling করা হয়।

Java Exception Handling Examples:

1. Basic try-catch Example:

এই উদাহরণে একটি সংখ্যাকে শূন্য দিয়ে ভাগ করার চেষ্টা করা হয়েছে, যা একটি ArithmeticException ত্রুটি সৃষ্টি করবে। try-catch ব্লক ব্যবহার করে ত্রুটিটি ধরা হয়েছে।

public class BasicExceptionHandling {
    public static void main(String[] args) {
        try {
            int result = 10 / 0; // This will throw ArithmeticException
        } catch (ArithmeticException e) {
            System.out.println("Error: Division by zero is not allowed.");
        }
    }
}

Output:

Error: Division by zero is not allowed.

Explanation:

  • try ব্লকে সেই কোডটি রাখা হয় যা ত্রুটি সৃষ্টি করতে পারে।
  • catch ব্লকে সেই ত্রুটির ধরন (যেমন ArithmeticException) উল্লেখ করা হয়, যা আপনার প্রোগ্রামের ত্রুটি ধরতে সাহায্য করে।
  • যখন ত্রুটি ঘটে, তখন catch ব্লক চালু হয় এবং ত্রুটির বার্তা দেখানো হয়।

2. Multiple Catch Blocks:

একাধিক ধরনের ত্রুটি ধরতে multiple catch blocks ব্যবহার করা হয়। এখানে আমরা ArithmeticException এবং ArrayIndexOutOfBoundsException একসাথে ব্যবহার করব।

public class MultipleCatchExample {
    public static void main(String[] args) {
        try {
            int[] numbers = new int[5];
            numbers[10] = 25; // This will throw ArrayIndexOutOfBoundsException
        } catch (ArithmeticException e) {
            System.out.println("ArithmeticException caught!");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("ArrayIndexOutOfBoundsException caught!");
        }
    }
}

Output:

ArrayIndexOutOfBoundsException caught!

Explanation:

  • প্রথমে ArithmeticException ক্যাচ করার চেষ্টা করা হবে, কিন্তু যদি তা না হয়, তাহলে পরবর্তী ArrayIndexOutOfBoundsException ধরা হবে।
  • প্রতিটি catch ব্লক আলাদা আলাদা exception ধরতে সক্ষম।

3. Nested Try-catch Example:

একটি try ব্লক এর মধ্যে আরেকটি try-catch ব্লক থাকতে পারে। এটি তখন ব্যবহার করা হয় যখন একাধিক ধরনের exception সম্ভাব্য থাকে এবং তাদের পৃথকভাবে পরিচালনা করা প্রয়োজন।

public class NestedTryCatchExample {
    public static void main(String[] args) {
        try {
            try {
                int result = 10 / 0; // This will throw ArithmeticException
            } catch (ArithmeticException e) {
                System.out.println("ArithmeticException caught inside inner try block.");
            }

            String str = null;
            str.length(); // This will throw NullPointerException
        } catch (NullPointerException e) {
            System.out.println("NullPointerException caught in outer try block.");
        }
    }
}

Output:

ArithmeticException caught inside inner try block.
NullPointerException caught in outer try block.

Explanation:

  • এখানে একটি inner try-catch এবং outer try-catch ব্লক ব্যবহার করা হয়েছে। প্রথমে ArithmeticException আভ্যন্তরীণ try ব্লকে ধরা হয়েছে এবং পরে NullPointerException বাহ্যিক catch ব্লকে ধরা হয়েছে।

4. Throw and Throws Example:

throw এবং throws স্টেটমেন্ট ব্যবহার করা হয় ত্রুটি প্রবর্তন এবং ঘোষণা করার জন্য।

public class ThrowThrowsExample {
    
    // Method declares exception using throws
    public static void validateAge(int age) throws Exception {
        if (age < 18) {
            throw new Exception("Age must be 18 or above.");
        }
    }

    public static void main(String[] args) {
        try {
            validateAge(16); // Throws Exception
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

Output:

Age must be 18 or above.

Explanation:

  • throws ব্যবহার করা হয়েছে validateAge মেথডে, যা Exception সৃষ্টির সম্ভাবনা দেখাচ্ছে। এর মানে হল যে এই মেথডটি একটি Exception ছুঁড়ে দিতে পারে।
  • throw স্টেটমেন্টে new Exception("message") ব্যবহার করে Exception ছোঁড়া হয়েছে।

5. Finally Block Example:

finally ব্লকটি এমন একটি ব্লক যা সর্বদা চলবে, যদি ত্রুটি ঘটে বা না ঘটে, এটি সবসময় রান হয়।

public class FinallyExample {
    public static void main(String[] args) {
        try {
            int[] numbers = new int[2];
            numbers[5] = 10; // This will throw ArrayIndexOutOfBoundsException
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Exception caught: " + e);
        } finally {
            System.out.println("This will always execute.");
        }
    }
}

Output:

Exception caught: java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 2
This will always execute.

Explanation:

  • finally ব্লকটি সর্বদা চলবে, এমনকি যদি কোন exception ঘটে বা না ঘটে। এটি সাধারণত পরিষ্কারতা বা রিসোর্স মুক্ত করার জন্য ব্যবহৃত হয়, যেমন ফাইল বা ডেটাবেস কানেকশন বন্ধ করা।

6. Custom Exception Example:

নিজের একটি custom exception তৈরি করা যায়, যা আপনার প্রোগ্রামে বিশেষ ধরনের ত্রুটি পরিচালনা করতে সাহায্য করে।

// Custom Exception class
class AgeException extends Exception {
    public AgeException(String message) {
        super(message);
    }
}

public class CustomExceptionExample {
    public static void main(String[] args) {
        try {
            int age = 15;
            if (age < 18) {
                throw new AgeException("Age must be 18 or above.");
            }
        } catch (AgeException e) {
            System.out.println(e.getMessage());
        }
    }
}

Output:

Age must be 18 or above.

Explanation:

  • এখানে একটি AgeException নামে কাস্টম এক্সেপশন তৈরি করা হয়েছে। যখন বয়স ১৮ এর কম হয়, তখন এই কাস্টম এক্সেপশনটি ছোঁড়া হয়।

Java তে Exception Handling অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি প্রোগ্রামের ত্রুটির সঠিক এবং নিরাপদ পরিচালনা নিশ্চিত করে। try-catch, throw, throws, এবং finally ব্যবহার করে ত্রুটি শনাক্ত এবং পরিচালনা করা সম্ভব। উপরের উদাহরণগুলো Java Exception Handling-এর মূল ধারণা বুঝতে সাহায্য করবে।

Content added By

Try-catch Block Example: Exception Handling এর জন্য Try-catch এর ব্যবহার

111
111

Java Exception Handling একটি শক্তিশালী ফিচার যা প্রোগ্রামের রuntime-errors বা অন্য কোন অনাকাঙ্ক্ষিত সমস্যা প্রতিরোধ করতে সহায়ক। try-catch ব্লক Java তে exception handling করার জন্য ব্যবহৃত হয়। এটি যখন কোনো কোড ব্লকে exception (ত্রুটি) ঘটে, তখন তা catch ব্লকে ধরা হয় এবং প্রোগ্রামটি ক্র্যাশ না হয়ে সঠিকভাবে চলতে থাকে।

try-catch ব্লক এর সাধারণ কাঠামো:

try {
    // কোড যা exception ঘটাতে পারে
} catch (ExceptionType e) {
    // exception ধরা হলে এটি execute হবে
}

Try-catch ব্লক উদাহরণ:

এখানে একটি সাধারণ উদাহরণ দেয়া হলো, যেখানে একটি ArithmeticException ধরা হয়েছে, যা 0 দ্বারা ভাগ করার সময় ঘটে।

Try-catch Example:

public class TryCatchExample {
    public static void main(String[] args) {
        int a = 10;
        int b = 0;
        
        try {
            // কোড যা exception ঘটাতে পারে
            int result = a / b;  // 0 দ্বারা ভাগ করার চেষ্টা
            System.out.println("Result: " + result);
        } catch (ArithmeticException e) {
            // ArithmeticException ধরা হলে এই ব্লক execute হবে
            System.out.println("Error: Cannot divide by zero.");
        }
        
        System.out.println("Program continues...");
    }
}

Explanation:

  1. try ব্লক: এখানে ১০কে ০ দ্বারা ভাগ করার চেষ্টা করা হয়েছে, যা একটি ArithmeticException সৃষ্টি করবে।
  2. catch ব্লক: catch (ArithmeticException e) দিয়ে সেই exception ধরা হচ্ছে। এখানে exception ধরা হলে "Error: Cannot divide by zero." মেসেজটি প্রিন্ট হবে এবং প্রোগ্রামটি থামবে না, চালু থাকবে।
  3. Program continues...: catch ব্লক থেকে exception সঠিকভাবে হ্যান্ডল করার পর প্রোগ্রামটি এটার পরবর্তী অংশে চলে যাবে।

Output:

Error: Cannot divide by zero.
Program continues...

Multiple catch Blocks Example:

একই try ব্লক থেকে একাধিক ভিন্ন ধরনের exception ধরার জন্য একাধিক catch ব্লক ব্যবহার করা যায়। এখানে আমরা একটি ArithmeticException এবং ArrayIndexOutOfBoundsException ধরার চেষ্টা করেছি।

Multiple catch Example:

public class MultipleCatchExample {
    public static void main(String[] args) {
        try {
            // ArithmeticException
            int a = 10;
            int b = 0;
            int result = a / b;
            
            // ArrayIndexOutOfBoundsException
            int[] numbers = new int[2];
            numbers[5] = 10; // Trying to access index 5, which is out of bounds
        } catch (ArithmeticException e) {
            System.out.println("Error: Cannot divide by zero.");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Error: Array index is out of bounds.");
        } catch (Exception e) {
            // General Exception
            System.out.println("Error: An unexpected error occurred.");
        }
        
        System.out.println("Program continues...");
    }
}

Explanation:

  1. Multiple Exceptions: এখানে দুটি catch ব্লক আছে—একটি ArithmeticException এবং একটি ArrayIndexOutOfBoundsException এর জন্য।
  2. General catch: যদি অন্য কোন exception ঘটে, তবে এটি Exception ক্লাস দ্বারা ধরা হবে, কারণ এটি Java তে সব ধরনের exceptions এর বেস ক্লাস।

Output:

Error: Cannot divide by zero.
Program continues...

Finally Block Example:

finally ব্লক ব্যবহার করা হয় এমন কোডগুলোর জন্য যা অবশ্যই execute হবে, exception ঘটুক বা না ঘটুক। যেমন, resources বন্ধ করা (যেমন: ফাইল স্ট্রিম) বা শেষের পরিষ্কারক কাজ।

finally Block Example:

public class FinallyExample {
    public static void main(String[] args) {
        try {
            System.out.println("In try block");
            int result = 10 / 2;
            System.out.println("Result: " + result);
        } catch (ArithmeticException e) {
            System.out.println("Error: Cannot divide by zero.");
        } finally {
            // This block will execute regardless of whether an exception occurs
            System.out.println("Finally block executed");
        }
        
        System.out.println("Program continues...");
    }
}

Explanation:

  1. finally block: এটি তখনই execute হবে, যখন try ব্লক শেষ হয়, এবং কোনো exception ঘটুক বা না ঘটুক, এটি অবশ্যই চলবে।
  2. Resources Cleanup: সাধারনত, finally ব্লকটি রিসোর্স ক্লিনআপের জন্য ব্যবহৃত হয় যেমন ফাইল বা ডেটাবেস সংযোগ বন্ধ করা।

Output:

In try block
Result: 5
Finally block executed
Program continues...

Exception Propagation Example:

যখন একটি মেথড exception ফেলে এবং সেটি আরেকটি মেথডে পাঠানো হয়, তখন আমরা exception propagation এর কথা বলি।

Exception Propagation Example:

public class ExceptionPropagationExample {
    public static void main(String[] args) {
        try {
            method1();
        } catch (Exception e) {
            System.out.println("Caught exception: " + e);
        }
    }
    
    public static void method1() throws Exception {
        method2();
    }
    
    public static void method2() throws Exception {
        throw new Exception("An error occurred in method2");
    }
}

Explanation:

  1. throws keyword: method1() এবং method2() তে throws Exception ব্যবহৃত হয়েছে, যা ইঙ্গিত দেয় যে এই মেথডগুলিতে exception ঘটতে পারে এবং সেগুলি main() মেথডে প্রেরণ করা হবে।
  2. Exception Propagation: method2() তে exception ঘটলে, তা method1() এ পাঠানো হবে এবং পরে main() মেথডে এটি catch করা হবে।

Output:

Caught exception: java.lang.Exception: An error occurred in method2

Java তে exception handling কোডে ত্রুটি বা সমস্যা ঘটলে প্রোগ্রামটি ক্র্যাশ না হয়ে সঠিকভাবে কাজ করতে সহায়তা করে। try-catch, finally এবং exception propagation এর মাধ্যমে আপনি আপনার প্রোগ্রামে ত্রুটির হ্যান্ডলিং সঠিকভাবে করতে পারবেন। এটি আপনাকে শক্তিশালী এবং রোবাস্ট অ্যাপ্লিকেশন তৈরি করতে সাহায্য করে।

Content added By

Multiple Catch Blocks Example: বিভিন্ন ধরনের Exceptions হ্যান্ডল করা

84
84

Java তে Multiple Catch Blocks ব্যবহার করা হয় বিভিন্ন ধরনের Exceptions হ্যান্ডল করার জন্য। একাধিক catch ব্লক ব্যবহার করে, আপনি একে একে একাধিক ধরনের exceptions কভার করতে পারেন, যাতে এক বা একাধিক ধরনের ত্রুটি (errors) হলে সেগুলি যথাযথভাবে হ্যান্ডল করা যায়।

Java 7 থেকে multi-catch ব্লকও চালু হয়েছে, যার মাধ্যমে একাধিক এক্সসেপশন একটি একক catch ব্লকে ক্যাচ করা সম্ভব।

1. Multiple Catch Blocks Example (Traditional Method)

নিচে একটি উদাহরণ দেয়া হলো যেখানে একাধিক catch ব্লক ব্যবহার করে বিভিন্ন ধরনের exceptions হ্যান্ডল করা হয়েছে:

Example: Handling Multiple Exceptions with Multiple Catch Blocks

public class MultipleCatchExample {
    public static void main(String[] args) {
        try {
            // Dividing by zero (ArithmeticException)
            int result = 10 / 0; 
            
            // Array index out of bounds (ArrayIndexOutOfBoundsException)
            int[] numbers = {1, 2, 3};
            System.out.println(numbers[5]); 

            // NullPointerException
            String str = null;
            System.out.println(str.length());
            
        } catch (ArithmeticException e) {
            System.out.println("Error: Division by zero is not allowed!");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Error: Array index out of bounds!");
        } catch (NullPointerException e) {
            System.out.println("Error: Attempt to access an object that is null!");
        } catch (Exception e) {
            System.out.println("General error: " + e.getMessage());
        }
    }
}

Explanation:

  1. try Block: এখানে বিভিন্ন ধরনের এক্সসেপশন তৈরি করা হয়েছে, যেমন ArithmeticException, ArrayIndexOutOfBoundsException, এবং NullPointerException
  2. Multiple catch Blocks: প্রতিটি এক্সসেপশনের জন্য আলাদা আলাদা catch ব্লক ব্যবহার করা হয়েছে।
  3. Generic Exception Handling: সর্বশেষে একটি catch(Exception e) ব্লক ব্যবহার করা হয়েছে যা অন্যান্য এক্সসেপশনের জন্য কাজ করবে।

Output:

Error: Division by zero is not allowed!

2. Multi-Catch (Java 7 and Above)

Java 7 থেকে একটি নতুন সুবিধা যুক্ত হয়েছে, যা হলো multi-catch ব্লক। এর মাধ্যমে আপনি একাধিক এক্সসেপশন এক সাথে একটি catch ব্লকে হ্যান্ডল করতে পারেন। এটি কোডের পুনরাবৃত্তি কমাতে সহায়তা করে।

Example: Handling Multiple Exceptions with Multi-Catch Block

public class MultiCatchExample {
    public static void main(String[] args) {
        try {
            // Dividing by zero (ArithmeticException)
            int result = 10 / 0;
            
            // Array index out of bounds (ArrayIndexOutOfBoundsException)
            int[] numbers = {1, 2, 3};
            System.out.println(numbers[5]);
            
        } catch (ArithmeticException | ArrayIndexOutOfBoundsException | NullPointerException e) {
            System.out.println("Error: " + e.getClass().getName() + " occurred!");
        }
    }
}

Explanation:

  1. Multi-Catch Block: এখানে catch ব্লকটি একাধিক এক্সসেপশন (যেমন ArithmeticException, ArrayIndexOutOfBoundsException, এবং NullPointerException) একসাথে ক্যাচ করতে পারে। এর ফলে কোড অনেক বেশি সংক্ষিপ্ত এবং পরিষ্কার হয়ে ওঠে।
  2. e.getClass().getName(): এটি ত্রুটির ধরন প্রিন্ট করে, যেমন ArithmeticException বা ArrayIndexOutOfBoundsException

Output:

Error: java.lang.ArithmeticException occurred!

3. Using the finally Block with Multiple Catch Blocks

একাধিক catch ব্লকের সাথে finally ব্লক ব্যবহার করা হলে, এটি একটি নির্দিষ্ট কোড ব্লক চালানোর জন্য ব্যবহৃত হয় যা যে কোনো ক্ষেত্রে এক্সসেপশন হ্যান্ডলিংয়ের পরে চালানো হয় (যেমন ফাইল ক্লোজ করা বা রিসোর্স মুক্ত করা)।

Example: Using finally Block with Multiple Catch Blocks

public class FinallyWithCatchExample {
    public static void main(String[] args) {
        try {
            // Dividing by zero (ArithmeticException)
            int result = 10 / 0;

        } catch (ArithmeticException e) {
            System.out.println("Error: Division by zero is not allowed!");
        } finally {
            System.out.println("Finally block executed: Cleanup actions.");
        }
    }
}

Explanation:

  • finally Block: finally ব্লকটি ব্যবহৃত হয় এমন কোড লেখার জন্য যা যেকোনো ক্ষেত্রে চালানো উচিত, যেমন ক্লোজিং ফাইল বা মেমরি রিলিজ করা, যা এক্সসেপশন হ্যান্ডলিংয়ের পরও কাজ করতে হয়।

Output:

Error: Division by zero is not allowed!
Finally block executed: Cleanup actions.

Key Points About Multiple Catch Blocks:

  1. Multiple Catch Blocks: আপনি একাধিক catch ব্লক ব্যবহার করে বিভিন্ন ধরনের এক্সসেপশন হ্যান্ডল করতে পারেন। এতে এক্সসেপশনের ধরন অনুযায়ী নির্দিষ্ট ব্লক এক্সিকিউট হবে।
  2. Multi-Catch (Java 7+): Java 7 থেকে আপনি একক catch ব্লকে একাধিক এক্সসেপশন হ্যান্ডল করতে পারেন, যা কোডের পুনরাবৃত্তি কমায় এবং আরও পরিষ্কার ও সোজা কোড তৈরি করে।
  3. finally Block: finally ব্লকটি এমন কোড রাখার জন্য ব্যবহৃত হয় যেটি এক্সসেপশন হ্যান্ডলিং শেষ হওয়ার পরে অবশ্যই এক্সিকিউট হয়, যেমন ফাইল বা নেটওয়ার্ক কানেকশন বন্ধ করা।
  • Multiple Catch Blocks এবং multi-catch ব্লক ব্যবহার করে Java তে একাধিক এক্সসেপশন হ্যান্ডল করা খুবই সহজ।
  • catch ব্লকগুলি ব্যবহার করে আপনার কোডের রোবাস্টনেস এবং ত্রুটি হ্যান্ডলিং আরও কার্যকরী করা যায়।
  • Java 7 এবং তার পরবর্তী সংস্করণে multi-catch ফিচারটি কোড সহজ এবং পরিষ্কার করে তোলে, কারণ এতে একাধিক এক্সসেপশন একই catch ব্লকে হ্যান্ডল করা যায়।
Content added By

Throw এবং Throws Example: কিভাবে Exception তৈরি এবং Declare করা যায়

90
90

Java তে exception handling একটি গুরুত্বপূর্ণ বিষয়। যখন কোনো রানটাইম এরর বা অস্বাভাবিক ঘটনা ঘটে, তখন exception থ্রো (throw) বা ডিক্লেয়ার (declare) করা হয় যাতে সিস্টেমটি সঠিকভাবে রেসপন্ড করতে পারে।

Throw এবং Throws ব্যবহার:

  • throw: এটি একটি কিওয়ার্ড যা কাস্টম exception তৈরি করে এবং তাতে মান সরবরাহ করে, অর্থাৎ আপনি একটি exception কুন্দলি করে তাতে ডাটা পাস করে থ্রো করতে পারেন।
  • throws: এটি একটি কিওয়ার্ড যা একটি মেথড ডিক্লেয়ারেশনে ব্যবহৃত হয়, যার মাধ্যমে মেথডটি এমন একটি exception ফেলে যা সে নিজে হ্যান্ডেল করতে না পারে, অন্যথায় এই exception অন্য কোথাও হ্যান্ডেল করতে হবে।

Throw এবং Throws এর মধ্যে পার্থক্য:

  • throw ব্যবহৃত হয় exception থ্রো করার জন্য, যখন আপনি একটি exception তৈরি করেন এবং সেটি throw করে দেন।
  • throws ব্যবহৃত হয় method declaration-এ exception ডিক্লেয়ার করার জন্য, যাতে মেথডটির ব্যবহারকারী জানে যে এটি কিছু exception ছুঁড়ে দিতে পারে, এবং সেই exception হ্যান্ডেল করা দরকার।

Throw Example:

এখানে একটি কাস্টম exception তৈরি করা হবে এবং তাকে থ্রো করা হবে।

1. Throw Example:

// Custom Exception class
class AgeException extends Exception {
    public AgeException(String message) {
        super(message);
    }
}

public class ThrowExample {
    public static void validateAge(int age) throws AgeException {
        if (age < 18) {
            throw new AgeException("Age is less than 18, you are not eligible.");
        } else {
            System.out.println("Age is valid.");
        }
    }

    public static void main(String[] args) {
        try {
            validateAge(15);  // Throws exception because age is less than 18
        } catch (AgeException e) {
            System.out.println(e.getMessage());  // Handling exception
        }
    }
}

Code Explanation:

  • AgeException: একটি কাস্টম exception তৈরি করা হয়েছে যা Exception ক্লাস থেকে extends করা হয়েছে।
  • validateAge(): এটি একটি মেথড যা age চেক করে এবং যদি এটি ১৮ বছরের কম হয়, তবে একটি AgeException থ্রো করা হয়।
  • main(): এখানে validateAge(15) মেথড কল করা হয়েছে, যা AgeException থ্রো করবে, এবং এটি catch block দিয়ে হ্যান্ডেল করা হয়েছে।

Output:

Age is less than 18, you are not eligible.

Throws Example:

এখানে throws কিওয়ার্ড ব্যবহার করা হবে যাতে মেথডটি exception ডিক্লেয়ার করতে পারে এবং সেই exception হ্যান্ডেল করতে হবে বাইরে।

2. Throws Example:

// Custom Exception class
class AgeException extends Exception {
    public AgeException(String message) {
        super(message);
    }
}

public class ThrowsExample {
    // Method that declares the exception using 'throws'
    public static void validateAge(int age) throws AgeException {
        if (age < 18) {
            throw new AgeException("Age is less than 18, you are not eligible.");
        } else {
            System.out.println("Age is valid.");
        }
    }

    public static void main(String[] args) {
        try {
            validateAge(15);  // Throws exception because age is less than 18
        } catch (AgeException e) {
            System.out.println(e.getMessage());  // Handling exception
        }
    }
}

Code Explanation:

  • validateAge() মেথডে throws AgeException ব্যবহৃত হয়েছে, যা এটি জানাচ্ছে যে এটি AgeException ফেলে দিতে পারে।
  • main() মেথডে exception হ্যান্ডলিং করা হয়েছে try-catch ব্লক দিয়ে।

Output:

Age is less than 18, you are not eligible.

Throws এবং Throw এর মধ্যে পার্থক্য:

বিষয়throwthrows
ব্যবহারএকটি exception থ্রো করতে ব্যবহৃত হয়।একটি মেথডের exception ডিক্লেয়ার করতে ব্যবহৃত হয়।
কোড সেগমেন্টসাধারণত মেথডের মধ্যে exception থ্রো করা হয়।মেথড সিগনেচারে exception ডিক্লেয়ার করা হয়।
কাজexception তৈরি এবং তা থ্রো করা।exception ফেলে দেয় এবং হ্যান্ডলিং এর দায়িত্ব অন্যদের উপর চাপায়।

Exception Handling Best Practices:

  1. Custom Exception: আপনি যখন কোনো নির্দিষ্ট ধরনের ত্রুটি বুঝতে চান, তখন কাস্টম exception ব্যবহার করুন (যেমন AgeException বা InsufficientBalanceException)।
  2. Meaningful Exception Messages: exception বার্তাগুলো সঠিক এবং অর্থপূর্ণ হওয়া উচিত, যাতে ডেভেলপাররা সহজেই বুঝতে পারে কেন এটি ঘটেছে।
  3. Try-Catch Blocks: exception হ্যান্ডলিং সঠিকভাবে করতে try-catch ব্লক ব্যবহার করুন, যাতে অ্যাপ্লিকেশন ক্র্যাশ না করে।
  4. Specific Exceptions: সাধারণ Exception ক্লাসের পরিবর্তে নির্দিষ্ট exception টাইপ ব্যবহার করুন যাতে ত্রুটি শনাক্ত করা সহজ হয়।
  • throw: একটি exception ইনস্ট্যান্স থ্রো করতে ব্যবহৃত হয় এবং এটি আপনি যখন একটি exception তৈরি করতে চান তখন ব্যবহার করেন।
  • throws: এটি মেথডের মধ্যে ডিক্লেয়ার করা হয়, যা জানায় যে মেথডটি একটি নির্দিষ্ট exception ফেলে দিতে পারে এবং এর হ্যান্ডলিং বাইরে করতে হবে।

এটি Java তে exception হ্যান্ডলিং করার একটি গুরুত্বপূর্ণ অংশ যা সঠিকভাবে ব্যবহৃত হলে প্রোগ্রামটিকে আরো রোবস্ট এবং ত্রুটিমুক্ত করে তোলে।

Content added By

Custom Exception Example: Custom Exception তৈরি এবং ব্যবহার

86
86

Java Custom Exception হল একটি কাস্টম এক্সেপশন ক্লাস তৈরি করা, যা Java এর বিল্ট-ইন এক্সেপশন ক্লাস থেকে এক্সটেন্ড করা হয় এবং সিস্টেমের নির্দিষ্ট ত্রুটি (error) বা পরিস্থিতি (condition) হ্যান্ডল করতে ব্যবহৃত হয়। কাস্টম এক্সেপশন তৈরি করা হয় যখন Java এর ডিফল্ট এক্সেপশন ক্লাসগুলি যথেষ্ট উপযুক্ত নয় বা আপনার প্রজেক্টে বিশেষ ত্রুটি পরিচালনার প্রয়োজন হয়।

Custom Exception তৈরি এবং ব্যবহার করার জন্য পদ্ধতি:

  1. Custom Exception ক্লাস তৈরি:
    • Java তে কাস্টম এক্সেপশন ক্লাস তৈরি করতে, Exception বা RuntimeException ক্লাস থেকে একটি নতুন ক্লাস তৈরি করতে হয়।
    • সাধারণত extends Exception (যদি checked exception তৈরি করতে চান) অথবা extends RuntimeException (যদি unchecked exception তৈরি করতে চান) ব্যবহার করা হয়।
  2. Custom Exception ব্যবহার:
    • কাস্টম এক্সেপশন ক্লাস তৈরি করার পরে, তা সাধারণ Java কোডে থ্রো (throw) এবং ক্যাচ (catch) করা যেতে পারে।

Custom Exception Example:

Step 1: Custom Exception ক্লাস তৈরি করা

// Custom Exception class: InvalidAgeException
public class InvalidAgeException extends Exception {

    // Constructor that accepts a message
    public InvalidAgeException(String message) {
        super(message); // Calling parent constructor to pass the message
    }
}

এখানে, InvalidAgeException একটি কাস্টম এক্সেপশন ক্লাস, যা Exception ক্লাস থেকে এক্সটেন্ড করা হয়েছে। এই ক্লাসে একটি কনস্ট্রাক্টর রয়েছে যা একটি ত্রুটির বার্তা গ্রহণ করে।

Step 2: Custom Exception ব্যবহার করা

// Main class where custom exception will be used
public class CustomExceptionExample {

    // Method that checks age and throws custom exception if age is invalid
    public static void validateAge(int age) throws InvalidAgeException {
        if (age < 18) {
            // Throwing custom exception with a message
            throw new InvalidAgeException("Age must be 18 or older to register.");
        } else {
            System.out.println("Age is valid. Registration successful!");
        }
    }

    public static void main(String[] args) {
        try {
            validateAge(15); // Testing with an invalid age
        } catch (InvalidAgeException e) {
            // Catching and handling custom exception
            System.out.println("Caught exception: " + e.getMessage());
        }

        try {
            validateAge(20); // Testing with a valid age
        } catch (InvalidAgeException e) {
            System.out.println("Caught exception: " + e.getMessage());
        }
    }
}

Code Explanation:

  1. Custom Exception (InvalidAgeException):
    • আমরা একটি কাস্টম এক্সেপশন InvalidAgeException তৈরি করেছি যা Exception ক্লাস থেকে এক্সটেন্ড করা হয়েছে।
    • কনস্ট্রাক্টরটি একটি ত্রুটির বার্তা গ্রহণ করে এবং super(message) এর মাধ্যমে প্যারেন্ট ক্লাসে পাঠায়।
  2. validateAge Method:
    • validateAge মেথডটি একটি ইনপুট age নিয়ে, এবং যদি বয়স ১৮ এর নিচে হয় তবে কাস্টম এক্সেপশন থ্রো করে।
    • যদি বয়স বৈধ হয়, তবে একটি সাফল্য বার্তা প্রিন্ট করা হয়।
  3. Main Method:
    • main মেথডে validateAge মেথডটি দুইবার কল করা হয়েছে — একবার অবৈধ বয়স (১৫) দিয়ে এবং একবার বৈধ বয়স (২০) দিয়ে।
    • InvalidAgeException ক্যাচ ব্লকটি কাস্টম এক্সেপশনটি হ্যান্ডল করে এবং ব্যবহারকারীকে উপযুক্ত ত্রুটির বার্তা দেখায়।

Output:

Caught exception: Age must be 18 or older to register.
Age is valid. Registration successful!

Additional Notes:

  • Checked vs Unchecked Exceptions:
    • Checked exceptions: কাস্টম এক্সেপশন যখন Exception ক্লাস থেকে এক্সটেন্ড করা হয়, তখন সেগুলি checked exceptions হিসেবে বিবেচিত হয়। এর মানে হলো, আপনি যখন এটি থ্রো করবেন, তখন মেথড সিগনেচারে throws InvalidAgeException যুক্ত করতে হবে এবং কলারকে এই এক্সেপশনটি হ্যান্ডল করতে হবে।
    • Unchecked exceptions: যদি RuntimeException থেকে এক্সটেন্ড করেন, তবে এটি unchecked exception হবে, এবং এটি ক্যাচ না করলেও চলবে।
  • Use Case:
    • কাস্টম এক্সেপশন সাধারণত সেই ক্ষেত্রে ব্যবহার করা হয় যখন আপনি আপনার অ্যাপ্লিকেশন বা সিস্টেমের জন্য বিশেষ পরিস্থিতি বা ত্রুটি চিহ্নিত করতে চান।
    • উদাহরণস্বরূপ, আপনি যদি একটি ব্যাংক অ্যাপ্লিকেশন তৈরি করেন এবং InsufficientFundsException তৈরি করতে চান, তাহলে আপনি একটি কাস্টম এক্সেপশন ব্যবহার করতে পারেন যা ব্যালান্স কম হওয়ার কারণে ত্রুটি দেখাবে।
  • Custom exceptions তৈরি করে আপনি আপনার Java প্রোগ্রামকে আরও কার্যকরী এবং ব্যবহারকারী-বান্ধব করতে পারেন।
  • কাস্টম এক্সেপশন ব্যবহার করে আপনি নির্দিষ্ট ত্রুটির অবস্থাকে চিহ্নিত করতে এবং সেটি কার্যকরভাবে হ্যান্ডল করতে পারেন।
Content added By

Finally Block Example: Resource Management এর জন্য Finally Block ব্যবহার

118
118

Java Finally Block একটি বিশেষ ব্লক যা try-catch-finally স্ট্রাকচারে ব্যবহৃত হয়। এটি সাধারণত resource management এর জন্য ব্যবহৃত হয়, যেমন ফাইল বা ডাটাবেস কানেকশন বন্ধ করা, বা অন্যান্য ক্লিনআপ অপারেশন করার জন্য। Finally block এমন একটি ব্লক যা try বা catch ব্লকের পরে যাই হোক না কেন, সর্বদা এক্সিকিউট হয়। এটি মূলত clean-up code হিসেবে কাজ করে, এবং একে ব্যবহার করার মাধ্যমে আপনি কোডের কার্যকারিতা ও সিস্টেমের নিরাপত্তা নিশ্চিত করতে পারেন।

Finally Block এর মূল উদ্দেশ্য:

  • Resources Close: যখন আপনি ফাইল, ডাটাবেস কানেকশন, নেটওয়ার্ক সোসকেট, বা অন্যান্য রিসোর্স ব্যবহার করেন, তখন তাদের সঠিকভাবে বন্ধ করতে finally block ব্যবহার করা হয়।
  • Guaranteed Execution: finally ব্লকটি যেকোনো পরিস্থিতিতেই এক্সিকিউট হবে, এমনকি যদি একটি এক্সিপশন হয় তাও। এটি নিশ্চিত করে যে নির্দিষ্ট কোড কার্যকর হবে।

Finally Block Example: Resource Management

ধরা যাক, একটি ফাইল ওপেন করা হচ্ছে, কিছু ডেটা পড়া হচ্ছে এবং শেষ পর্যন্ত ফাইলটি বন্ধ করতে হবে। এমন পরিস্থিতিতে finally block ব্যবহার করে ফাইলটি সঠিকভাবে বন্ধ করা যায়, এমনকি যদি কোন exception ঘটে।

Example: File Handling with Finally Block

import java.io.*;

public class FinallyBlockExample {
    public static void main(String[] args) {
        FileReader file = null;
        BufferedReader reader = null;

        try {
            // ফাইল খোলা
            file = new FileReader("example.txt");
            reader = new BufferedReader(file);

            // ফাইলের ডেটা পড়া
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            // Exception Handling
            System.out.println("An error occurred while reading the file: " + e.getMessage());
        } finally {
            // Finally block ব্যবহার করে resources বন্ধ করা
            try {
                if (reader != null) {
                    reader.close();
                    System.out.println("BufferedReader closed.");
                }
                if (file != null) {
                    file.close();
                    System.out.println("FileReader closed.");
                }
            } catch (IOException e) {
                // Exception Handling while closing resources
                System.out.println("An error occurred while closing the resources: " + e.getMessage());
            }
        }
    }
}

Code Explanation:

  1. try block: এখানে ফাইল খোলা হচ্ছে এবং ডেটা পড়া হচ্ছে। ফাইল এবং BufferedReader এর মাধ্যমে স্ট্রিং পড়া হচ্ছে।
  2. catch block: যদি কোনো IOException (যেমন ফাইল না পাওয়া, ডেটা রিড করার সময় কোনো সমস্যা) ঘটে, তবে তা এখানে ধরা হবে এবং এর মেসেজ প্রিন্ট হবে।
  3. finally block: এটা সিস্টেমে resources বন্ধ করার জন্য ব্যবহৃত হয়। যেমন:
    • BufferedReader এবং FileReader অবজেক্টগুলোকে বন্ধ করা হচ্ছে। এটি একটি ভালো অভ্যাস, কারণ resources এক্সপিরেশন (পরিসমাপ্তি) না হলে সিস্টেমে মেমরি লিক বা অন্যান্য সমস্যা হতে পারে।
    • যদি কোনো exception না-ও ঘটে, তবুও finally ব্লকটি এক্সিকিউট হবে এবং resources সঠিকভাবে বন্ধ করা হবে।

Output Example:

  1. যদি example.txt ফাইলটি সঠিকভাবে থাকে এবং পড়ে নেওয়া যায়, তবে আউটপুট হতে পারে:
Line 1 content
Line 2 content
BufferedReader closed.
FileReader closed.
  1. যদি ফাইলটি না পাওয়া যায়, তাহলে আউটপুট হবে:
An error occurred while reading the file: example.txt (No such file or directory)
An error occurred while closing the resources: null

Advantages of Using Finally Block for Resource Management:

  1. Guaranteed Cleanup: finally ব্লকটি নিশ্চিত করে যে আপনি resources সঠিকভাবে বন্ধ করবেন, এমনকি যদি কোডের মধ্যে একটি exception ঘটে।
  2. Avoid Memory Leaks: যখন resources যথাযথভাবে বন্ধ করা হয় না, তখন মেমরি লিক বা রিসোর্স ফাঁক হতে পারে। finally ব্লক নিশ্চিত করে যে resources বন্ধ হবে এবং মেমরি লিক থেকে রক্ষা করবে।
  3. Cleaner Code: finally ব্লক ব্যবহার করলে কোডের মধ্যে resource cleanup করার জন্য আলাদা স্টেটমেন্ট লেখার প্রয়োজন হয় না এবং কোড পরিষ্কার থাকে।

finally ব্লক resource management এবং clean-up করার জন্য অত্যন্ত গুরুত্বপূর্ণ। যখন আপনি ফাইল, ডাটাবেস, নেটওয়ার্ক সোসকেট বা অন্য কোনো resource নিয়ে কাজ করেন, তখন এই ব্লকটি ব্যবহারের মাধ্যমে আপনি নিশ্চিত করতে পারেন যে resources সঠিকভাবে বন্ধ হবে, এবং সিস্টেমের কার্যকারিতা বজায় থাকবে।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion