" ব্যতিক্রমগুলি কীভাবে কাজ করে সে সম্পর্কে আমি আপনাকে কিছুটা বলতে চাই ৷ নীচের উদাহরণটি আপনাকে কী ঘটবে তার একটি মোটামুটি ধারণা দেবে:"

কোড যা ব্যতিক্রম ব্যবহার করে:
class ExceptionExampleOriginal
{


    public static void main(String[] args)
    {
        System.out.println("main begin");
        try
        {
            System.out.println("main before call");

            method1();



            System.out.println("main after call");
        }
        catch (RuntimeException e)
        {


            String s = e.getMessage();
            System.out.println(s);
        }
        System.out.println("main end");
    }

    public static void method1()
    {
        System.out.println("method1 begin");
        method2();

        System.out.println("method1 end");
    }

    public static void method2()
    {
      System.out.println("method2");
      String s = "Message: Unknown Exception";
      throw new RuntimeException(s);

    }
}
যা ঘটে তার আনুমানিক উপস্থাপনা
public class ExceptionExample
{
    private static Exception exception = null;

   public static void main(String[] args)
    {
        System.out.println("main begin");


        System.out.println("main before call");

        method1();

        if (exception == null)
        {
            System.out.println("main after call");
        }
        else if (exception instanceof RuntimeException)
        {
            RuntimeException e = (RuntimeException) exception;
            exception = null;
            String s = e.getMessage();
            System.out.println(s);
        }
        System.out.println("main end");
    }

    public static void method1()
    {
        System.out.println("method1 begin");
        method2();
        if (exception != null) return;
        System.out.println("method1 end");
    }

    public static void method2()
    {
        System.out.println("method2");
        String s = "Message: Unknown Exception";
        exception = new RuntimeException(s);
        return;
    }
}

"আমি পুরোপুরি হারিয়ে গেছি।"

"ঠিক আছে। আমাকে ব্যাখ্যা করতে দিন কি হচ্ছে।"

"বাম দিকের উদাহরণে, আমরা ধারাবাহিকভাবে কয়েকটি পদ্ধতিকে কল করি। তে method2, আমরা ইচ্ছাকৃতভাবে একটি ব্যতিক্রম তৈরি করি এবং নিক্ষেপ করি (আমরা একটি ত্রুটি তৈরি করি)।"

"ডান দিকের উদাহরণ দেখায় কি ঘটছে।"

"দেখুন method2। একটি ব্যতিক্রম তৈরি করার পরিবর্তে, আমরা একটি RuntimeExceptionঅবজেক্ট তৈরি করি, এটিকে স্ট্যাটিক ভেরিয়েবলে সংরক্ষণ করি exceptionএবং তারপর অবিলম্বে একটি returnবিবৃতি ব্যবহার করে পদ্ধতি থেকে প্রস্থান করি।"

"এ method1, কল করার পরে method2, আমরা পরীক্ষা করি কোন ব্যতিক্রম আছে কিনা। যদি ব্যতিক্রম থাকে, তাহলে method1একবারেই শেষ হয়ে যায়। জাভাতে প্রতিটি (!) পদ্ধতি কলের পর পরোক্ষভাবে এই ধরনের একটি চেক করা হয়।"

"কি দারুন!"

"ওয়াও ঠিক বলেছেন।"

"ডান কলামে, ট্রাই-ক্যাচ কনস্ট্রাক্ট ব্যবহার করে একটি ব্যতিক্রম ধরা পড়লে আনুমানিক কী ঘটে তা দেখানোর জন্য আমি প্রধান পদ্ধতি ব্যবহার করেছি। যদি কোন ব্যতিক্রম না থাকে, তাহলে সবকিছু প্রত্যাশা অনুযায়ী চলতে থাকে। যদি একটি ব্যতিক্রম থাকে এবং এটি ক্যাচ স্টেটমেন্টে একই ধরণের উল্লেখ করা হয়েছে, তারপর আমরা এটি পরিচালনা করি।"

" throw আর instanceof মানে কি? "

"শেষ লাইনটি দেখুন: throw new RuntimeException(s);. আপনি এইভাবে একটি ব্যতিক্রম তৈরি করেন এবং নিক্ষেপ করেন। আমরা এখনও এটিতে কাজ করব না। এটি একটি উদাহরণ ছিল।"

"আমরা a instanceof Bবস্তুটি aটাইপের কিনা তা পরীক্ষা করতে ব্যবহার করি B, অর্থাৎ পরিবর্তনশীল ব্যতিক্রম দ্বারা উল্লেখ করা বস্তুটি একটি RuntimeException কিনা। এটি একটি বুলিয়ান এক্সপ্রেশন।"

"আমার মনে হয় আমি পেয়েছি। প্রায়।"