Skip to main content

প্রাকটিক্যাল throw, catch গেম (post - 6)


এর আগের একটা পোস্টে থ্রো, ক্যাচ খেলার ৪ টা পদ্ধতির কথা বলেছিলাম, এখন তার প্রাকটিক্যাল CoDe গুলা দেখাব

১। জাভা থ্রো করবে  -> জাভা ক্যাচ করবে  (এক্সেপশন থ্রো করবে)
আমাদের সাধারণ কোড ই এটার উদাহরণ। যেমনঃ

public class Main{
        public static void main(Stirng[] args){
1.             System.out.println(5/0);                 //ArithmeticException
2.             System.out.println(‘’Hello”);
        }
}
আউটপুটঃ
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at package.class.method(class.java:4)

ব্যাখ্যাঃ Line 1 এ যখন ArithmeticException Occur হবে তখন জেভিএম ,ইউজারের বানানো কোনো হ্যান্ডেলার না পেয়ে, ArithmeticException class এর অবজেক্ট বানিয়ে Default Exception Handler  এর কাছে থ্রো করবে,  আবার জেভিএম এর ই ক্যাচ মেকানিজম ঐটা রিসিভ করে প্রিন্ট করে প্রোগ্রাম বন্ধ করে দিবে, লাইন 2  আর প্রিন্ট করবে না। এইখানে জাভা ই থ্রো করল, জাভা ই ক্যাচ করে প্রিন্ট করল।


২।জাভা থ্রো করবে -> কিন্তু আমরা ক্যাচ করব
এটা আগে দেখাইসি, কোড দেখেন তাইলেই বুঝবেন।এক্সেপশন হতে পারে এমন লাইন try ব্লকের মধ্যে রেখেছি, এক্সেপশন হলে জাভা থ্রো করবে, যেটা আমাদের লিখা ক্যাচ ব্লকের মাধ্যমে রিসিভ করেছি।

public class Main{
    public static void main(String[] args) {
1.        int a=24,b=0,c;
 2.       try{
 3.           c=a/b;    // ArithmeticException
        }catch(ArithmeticException object){
            System.out.println("caught it");
           System.out.println(object.getMessage());
        }
    }
}
আউটপুটঃ
caught it
/ by zero
BUILD SUCCESSFUL (total time: 0 seconds)

getMessage(): কেন এরর হইসে শুধু এটা প্রিন্ট করবে ছোট করে।
toString(): এক্সেপশনের নাম আর কেন হইসে এটা প্রিন্ট করবে।
printStackTrace():  এক্সেপশনের নাম, ঠিকানা ,কেন হইসে। ঠিকানা মানে প্যাকেজ নাম,ক্লাস নাম,কত নাম্বার লাইনে এরর সব প্রিন্ট করে দিবে।

৩।আমরা থ্রো করব -> জাভা ক্যাচ করবে
এখন আমরা থ্রো করতে চাই। এটাতো কম্পিউটারকে বলা লাগবে তাই না? তো বলেন  “throw” .  throw বললেই হবে?   throw  মানে তো চালানো, কি চালাবে? যেই এক্সেপশন occur করবে সেই এক্সেপশন ক্লাসের অবজেক্ট throw  করতে হবে।
Syntax:
throw exception;
throw new ArithmeticException(“Arithmetic Error occured”);
throw new IOException(“Sorry device error”);

একটা কথা তো বলতেই ভুলে গেছিলাম, এক্সেপশন হইলেতো জাভা নিজেই থ্রো করে, আমাদের থ্রো করার কি দরকার?   জাভা থ্রো করে কোনগুলা? এগুলা সব,







কিন্তু কিন্তু কিন্তু, যদি আমরা নিজেদের বানানো শর্তের আওতায় কোনো এক্সেপশন দেখাইতে চাই তখন আমরা throw  ইউজ করব, ওকে ? বুঝেন নাই তো?  বুঝবেন কিন্তু দেরিতে


ধরেন একটা প্রোজেক্ট বানাতে বলা হইসে, “ভোটিং মেশিন” ১৮ বছরের নিচে কেউ ভোট দিতে পারবে না, তাই আপনি চান ১৮ বছরের নিচের কেউ ভোট দিলে এক্সেপশন থ্রো করতে চান, তখন আমরা নিজের থ্রো ইউজ করব, কারণ জাভার এক্সেপশন ক্লাসের মধ্যে কোনো ক্লাসেই এমন নাই যে ১৪, ১৫,৫ এগুলা ইনপুটের জন্য আপনাকে এক্সেপশন থ্রো করে দিবে  বা এরর দেখাবে, এটা আপনার ব্যক্তিগত সমস্যা  তাই আপনাকে নিজের সুবিধা অনুযায়ী থ্রো করা লাগবে। বুঝলেন তো?  কোড দেখি চলেন,

public class Main{
    public static void main(String[] args) {
        int age=15;
        if(age<18){
1.            throw new ArithmeticException("Dil toh baccha hai ji");
        }
        else{
            System.out.println("ssshhhhh");
        }
    }
}

Output:
Exception in thread "main" java.lang.ArithmeticException: Dil toh baccha hai ji
        at package.class.method(class.java:1)

এইখানে ১৮ এর নিচের ইনপুটের জন্য আমাদের এক্সেপশন থ্রো হবে , আমরা ক্যাচ ব্লক লিখিনি, তাই জাভার Default Exception Handling এর ক্যাচ মেকানিজম এটা ক্যাচ করে প্রিন্ট করে প্রোগ্রাম বন্ধ করে দিবে। তাহলে কি হলো? আমরা এক্সেপশন থ্রো করলাম, জাভা ক্যাচ করল।


৪।আমরা থ্রো করবো -> আমরাই ক্যাচ করব
আগের টুক যদি বুঝেই থাকেন তাহলে এটা কোড দেখলেই বুঝবেন আর কি,


public class Main{
    public static void main(String[] args) {
        int age=12;
        try{
        if(age<18){
            throw new ArithmeticException();
        }
        }catch(ArithmeticException e){
            System.out.println("Catch korsi");
        }
       
    }
}

আউটপুটঃ
Catch korsi
BUILD SUCCESSFUL (total time: 0 seconds)

কি করলাম এইখানে? আমরা নিজেদের এক্সেপশন থ্রো করেছি আগের প্রোগ্রামের মত করে, যেই লাইন গুলাই থ্রো হবে সেগুলোকে try ব্লকের মধ্যে রেখে দিয়েছি, try  ব্লক থেকে আমাদের দেয়া শর্ত সাপেক্ষে এক্সেপশন থ্রো হবে আমরা শুধু ক্যাচ ব্লক লিখে ঐ টার মাধ্যমে রিসিভ করেছি।তাহলে আমরা থ্রো করলাম, আমরা ক্যাচ করলাম।   



খেলা শেষ  :D



     <-Previous Topic                                                                                  Next Topic->


Move to:
Post 7              Post 8
Post 6              Post 9
Post 5 
Post 4
Post 3 
Post 2 
Post 1


Comments

Popular posts from this blog

IELTS Spoken Class Adminssion Scenario - 01

.......  Student: Hello, May I come in, sir ? Optional (student): May I sit ? Sir:  Please have a seat. Sir: How may I help you, Sir ? Student: I would like to admit in your spoken course. Sir: Oh sure. Student: How many days are there in a week ? Sir: There are three classes in a week. Student: What time do you offer class ? Sir: We have class at 11am / 4pm / 6pm / 8pm

Php Learning Time

 Differences of explode( ) and implode( ) in php: explode: একটা স্ট্রিংকে কোনো একটা সেপারেটরের বেসিসে অ্যারেতে কনভার্ট করে, যেমন  <?php $text="Hello How are you?"; print_r(explode(" ",$text)); ?> This will give output of  Array (     [0] => Hello     [1] => How     [2] => are     [3] => you? ) Differences of array_splice( ) and array_slice( ) ধরেন আসল অ্যারে হচ্ছে    $arr =[ "Hello" , "this" , "is" , "test" , "text" ];    এখন এটাকে স্লাইসিং করার জন্য আমরা উপরের দুইটা মেথড ই ব্যবহার করতে পারি , কিন্তু array_splice এটা ইউজ করলে অরজিনাল array ও চেঞ্জ হয়ে যাবে, মানে যদি আমরা এভাবে লিখি  $var2 = array_splice ( $arr , 0 , 2 );   তাইলে $var2 এর ভিতরে থাকবে ["Hello" , "this"] ,  আর অরজিনাল array তে বাকি থাকবে ["is", "test", "text"] কিন্তু যদি আমরা ইউজ করি তাহলে অরজিনাল array আগের মতোই থাকবে পাশাপাশি $var2 এর মধ্যে ভ্যালু গুলা এসে পড়বে  Array (     [0] => ...