Skip to main content

User Define Exception or Customized Exception (Post 9)



এই পোষ্ট বুঝতে গেলে  throw vs throws keyword (post -8 )      অবশ্যই পড়ে আসতে হবে।    




এক্সেপশনের ফ্যামিলি নিয়ে বলেছিলাম যে একবার ঐটা এখন লাগবে হালকা।
ইউজার ডিফাইন এক্সেপশন শিখব এখন, মানে আপনি আপনার ইচ্ছা মত এক্সেপশন বানাইতে পারবেন ১০০% ফ্রি। কেউ বলতে আসবে না এইটা কি বানাইলা, আপনি যদি চান ইউজার ১ ইনপুট দিলে আপনি ঐটার জন্যেও এক্সেপশন থ্রো করবেন আপনি সেটাও পারবেন, ইচ্ছে মত খেলতে পারবেন এক্সেপশন নিয়ে।


১। আপনার মনে যদি এই প্রশ্ন আনচান করে উঠে
জাভাতে এত Built-in এক্সেপশন থাকতে আমরা ক্যান গায়ে খেটে এক্সেপশন বানাবো?

তাহলে মনকে শান্তনা দিবেন এভাবে...

আমরা নিজেদের বানানো শর্তের আওতায় কোনো এক্সেপশন দেখাইতে চাই তখন আমরা throw  ইউজ করব, ওকে ? বুঝেন নাই তো?  বুঝবেন কিন্তু দেরিতে
ধরেন একটা প্রোজেক্ট বানাতে বলা হইসে, “ভোটিং মেশিন” ১৮ বছরের নিচে কেউ ভোট দিতে পারবে না, তাই আপনি ১৮ বছরের নিচের কেউ ভোট দিলে এক্সেপশন থ্রো করতে চান, তখন আমরা নিজের থ্রো (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 এর ক্যাচ মেকানিজম এটা ক্যাচ করে প্রিন্ট করে প্রোগ্রাম বন্ধ করে দিবে। তাহলে কি হলো? আমরা এক্সেপশন থ্রো করলাম, জাভা ক্যাচ করল। 

এইরকম অনেক সময় নিজের দেয়া শর্তের মধ্যে এক্সেপশন থ্রো এর দরকার পরে, তাই আমরা ইউজার-ডিফাইন এক্সেপশন শিখব।


এক্সেপশন এর ফ্যামিলি দুই ধরনের, যেমনঃ  ১।চেকড ,  ২। রানটাইম(আনচেকড)
Throwable > Exception > 

1.Checked Exception 

i.            FileInputStream 
ii.          SQLException 
iii.        IOException

2. RuntimeException
    
 i. ArithmeticException
    ii. StackOverFlowException
    iii. ArrayIndexOutOfBoundsException  

ইত্যাদি…।।


তো আমরা যে এক্সেপশন বানাবো তার মধ্যেও চেকড or আনচেকড এর যেকোনো একটার বৈশিষ্ট্য থাকতে হবে, তবেই তো এক্সেপশন হবে, বৈশিষ্ট্য কপি করার অন্যতম উপায় হচ্ছে extend করা।  তাই আমাদের এক্সেপশনের যেকোনো একটা ক্লাস এক্সটেন্ড করতে হবে।

এখন আমরা যে নিজের হাতে এক্সেপশন বানাবো, তো সেটা কোন ধরনের হবে ? চেকড নাকি রানটাইম ?

Exception ক্লাসের  আন্ডারে সব এক্সেপশন পড়ে , মানে চেকড(Checked) , আনচেকড(Unchecked)। তাই এক্সেপশন এক্সটেন্ড করে সব এক্সেপশন ইউজ করতে পারব, কিন্তু রানটাইম এক্সেপশনগুলো শুধু RuntimeException ক্লাসের মধ্যেই থাকে।তাই রানটাইম এক্সেপশন বানানোর জন্য RuntimeException  ক্লাসকে এক্সটেন্ড করতে হয়।

মনযোগ দেনঃ
যদি চাই যে আমরা যে এক্সেপশন বানাবো তার বৈশিষ্ট্য চেকড এক্সেপশন এর মত হউক তাহলে এক্সটেন্ড করব
“Exception” ক্লাসকে।


আর যদি আনচেকড এক্সেপশন বা রানটাইম এক্সেপশন বানাইতে চাই তাহলে এক্সটেন্ড করব “RuntimeException”  ক্লাসকে ।

এক্সেপশনের নাম ও নিজের ইচ্ছা মত দিবেন, যেমন আমি দিসি এইখানে


class IntegerResultNotFound extends Exception{
    IntegerResultNotFound(){
        super("Answer is not an integer");
    }
}
public class M{
    public static void main(String[] args) throws IntegerResultNotFound{
        int a=25;
        int b=3;
        int c=a/b;
        if(a%b!=0){
            throw new IntegerResultNotFound();
        }
        else
            System.out.println("Answer is Integer");
    }
}

আউটপুটঃ
Exception in thread "main" package.IntegerResultNotFound: Answer is not an integer
        at package.M.main(M.java:12)

২৫/৩=৮.৩৩৩৩৩৩৩..................


"IntegerResultNotFound" এই নামের কিন্তু কোনো এক্সেপশন নাই, এটা আমি দিয়েছি, আপনার অন্যকিছু ভাল্লাগলে ঐটা দিবেন।

এইখানে আমি এক্সটেন্ড করেছি Exception ক্লাসকে, মানে আমি যে এক্সেপশন টা বানাইলাম (IntegerResultNotFound) এটা চেকড এক্সেপশন আর যেহেতু চেকড এক্সেপশন তাই মেইন মেথডকে throws keyword দিয়ে রিপোর্ট করতে হইসে, Same  কোড দেখব রানটাইম এক্সেপশন দিয়ে।

(যদি ধরে নেই  আগের পোষ্ট পড়ে এসেছেন , তাহলে throw , throws  কোথায়, কেন এগুলা বুঝেছেন আশা করি)

class IntegerResultNotFound extends RuntimeException{
    IntegerResultNotFound(){
        super("Answer is not an integer");
    }
}
public class M{
    public static void main(String[] args){
        int a=25;
        int b=3;
        int c=a/b; 
        if(a%b!=0){
            throw new IntegerResultNotFound();
        }
        else
            System.out.println("Answer is Integer");
    }
}
আউটপুটঃ
 

Exception in thread "main" package.IntegerResultNotFound: Answer is not an integer
        at package.M.main(M.java:12)

দেখেন আউটপুট Same  কিন্তু ‘throws’ keyword ইউজ করিনি কারণ এক্সটেন্ড করেছি “RuntimeException” ক্লাসকে। অর্থাৎ এটা একটা আনচেকড এক্সেপশন তৈরী হয়েছে। আর আনচেকড এক্সেপশন কম্পাইলার ধরতে পারে না, তাই কম্পাইলারকে throws দিয়ে রিপোর্ট করতে হয়নি।

তো এভাবে আমরা ইউজার ডিফাইন এক্সেপশন বানাইতে পারি, এক্সেপশন হ্যান্ডেল করার নিয়ম আগের গুলার মতোই।

নিজের এক্সেপশন অবশ্যই বানিয়ে দেখবেন।

গুড নাইট, টা টা , সি ইউ।


 এই পোষ্ট না পড়ে থাকলে একবার দেখে নিয়েন নিজ দ্বায়িত্তে     throw vs throws keyword (post -8 )



 <- Previous 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] => ...