Skip to main content

throw vs throws keyword (post -8 )


 <-Previous Topic




 
Exception Instance means Exception  এর Object :p


কম্পাইলার একটু বলদ টাইপ হইতে পারে, কিন্তু তার ভাবের শেষ নাই। বলদ কেন? সে নিজে তো সব ধরনের এক্সেপশন চেক করতে পারেনা, ভাব বেশি কেন? কারণ, কম্পাইলার যেগুলা চেক করতে পারে আপনার কোডে যদি ঐরকম এরর হওয়ার সম্ভাবনা থাকে আর আপনি যদি সেগুলা আগে থেকেই কম্পাইলারকে রিপোর্ট না করেন আপনার কোড জীবনেউ কম্পাইল করবে না, আর কম্পাইল না হইলে রানটাইমেউ এরর পাবেন  :D


মানে কমিউনিটি সেন্টারে অনুষ্ঠান করবেন , কতজন লোক হবে তার আইডিয়া আগে থেকেই দিয়ে রাখতে হবে এমন টাইপ আর কি। চেকড এক্সেপশন নিয়ে কাজ করলে এমন ভাবেই আগে থেকে কম্পাইলারকে জানিয়ে রাখতে হবে, যে উমুক এক্সেপশন হতে পারে, আমি এটা হ্যান্ডেল করার জন্য প্রস্তুত। প্রস্তত বললেই কি প্রস্তুত? কিভাবে হ্যান্ডেল করবেন??  দুই ভাবে করতে পারেন। কি কি  ভাবে? 
১।  try , catch ইউজ করে
                        ২। throws keyword  ইউজ করে

কম্পাইল ধরতে পারে যে এক্সেপশন গুলা তাদের কি বলে মনে আছে? চেকড এক্সেপশন, আর যেগুলা কম্পাইলার ধরতে পারে না রানটাইমে যেয়ে ধরা খায় তারা আনচেকড অথবা রানটাইম এক্সেপশন।

তার মানে  এই যে আমাদের কোডে যদি চেকড এক্সেপশন হওয়ার সম্ভাবনা থাকে তাহলে আমাদের কম্পাইলারকে আগে থেকেই রিপোর্ট করতে হবে ,তা নাহলে কম্পাইলার আমাদের কোড কম্পাইল করবে না, আপনি চেকড এক্সেপশন নিয়ে কাজ করতে গেলে কম্পাইলারকে রিপোর্ট করতে বাধ্য।


কয়েকটা চেকড এক্সেপশনের নাম রিমাইন্ড করে নেই, ওকে?
IOException>FileNotFoundException , ClassNotFound,SQLException, InterruptedException.

IOException  নিয়ে কোড দেখব এখন।

import java.io.IOException;

public class M {
    void m(int a){
        if(a<10){
8.           throw new IOException("device error");
        }
    }
    public static void main(String[] args) {
        M m=new M();
13.        m.m(5);
    }
}
আউটপুটঃ
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - unreported exception java.io.IOException; must be caught or declared to be thrown
        at package.Test.m(Test.java:8) //method “m”, Line “8”
        at package.Test.main(Test.java:13) //method”main”, Line” 13”

আমাদের কোডের কাজ ছিল , ভ্যালু যদি 10 (a<10)  এর চেয়ে ছোট হয় তাহলে আমরা এক্সেপশন থ্রো করব । Line 13  এ আমরা মেইন মেথড থেকে ভ্যালু পাস করেছি  5 ( m.m(5) )। 5<10  তাই এক্সেপশন থ্রো হইসে, থ্রো করসি IOException  (ইচ্ছা মতো অন্যকোনো এক্সেপশন ও থ্রো করতে পারতাম)।

IOException  হইসে এইটা আপনি আগে থেকে রিপোর্ট করনেনি, তাই আপনার সোর্স কোড  Uncompilable source code , আর যে এক্সেপশনটা রিপোর্ট করতে হতো সেটা হলো unreported exception java.io.IOException

প্রোগ্রাম চালাইতে চাইলে রিপোর্ট তো করাই লাগবে, দুই ভাবে করা যায়,  1.throws and 2.(try, catch)

আগে throws  এর টা দেখি,  throws  কিন্তু সবসময় মেথড এর সাথে লাগাতে হয়, মানে আপনার কোডের যেই মেথড থেকে চেকড এক্সেপশন পইদা হউয়ার চান্স আছে সেই মেথডের সাথে  throws “উমুক এক্সেপশন”।

Syntax:
এই মেথড() throws “উমুক এক্সেপশন”{
//Codes or exceptions
}
উপরের কোডে মেথডের নাম m(); তাহলে কিভাবে লিখব?
void m() throws IOException{
//এক্সেপশন হবে এমন লাইন // int a=”Rifat”; integer এর মধ্যে String
এক্সেপশন হবে এমন কোন ইকুয়েশন(5/0)  লিখতে পারেন, অথবা নিজে এক্সেপশন throw  করতে পারেন।
throw new IOException();
}

উপরের কোডে ১৩ নাম্বার লাইনেউ এরর দেখাইসে, কারণ ১৩ নাম্বার লাইনে আমরা M ক্লাসের  অবজেক্ট  বানিয়ে m() মেথডকে কল করেছি, আর m(); মেথড IOException throw করে, যেটা একটা চেকড এক্সেপশন, যেটা এখন মেইন মেথডের মধ্যে চলে এল এই লাইন লিখার মাধ্যমে,
m.m(5);

তাই আমাদের মেইন মেথডেউ IOException রিপোর্ট করতে হবে।


কোড দেখেন বুঝেন কিনা এখন,

import java.io.IOException;

public class M {
    void m(int a)throws IOException{
        if(a<10){
           throw new IOException("Code kaj korse");
        }
    }
    public static void main(String[] args)throws IOException {
        M m=new M();
        m.m(5);
    }
}
আউটপুটঃ
Exception in thread "main" java.io.IOException: Code kaj korse
        at package.class.m(M.java:8)
        at package.class.main(M.java:13)

আউটপুট এমন আসার কারণ, আপনি এক্সেপশন throw করেছেন ভাল কথা, কিন্তু কোনো catch ব্লক লেখেননি, তাই JVM  আপনার থ্রো করা এক্সেপশন Default Exception Handler  এর কাছে পাঠিয়ে দিয়েছে, তাই সে আপনার এক্সেপশন ক্যাচ করে প্রিন্ট করে বন্ধ করে দিয়েছে।


Same Code using try, catch

import java.io.IOException;

public class M {
    void m(int a){
        try{
          if(a<10){
           throw new IOException();
        }  
        }catch(IOException e){
            System.out.println("Kire ");
        }
       
    }
    public static void main(String[] args){
        M m=new M();
        m.m(5);
    }
}
আউটপুটঃ
Kire
BUILD SUCCESSFUL (total time: 0 seconds)

মেইন মেথডে এইবার এক্সেপশন throws , try, catch কিছুই লাগেনি, কারণ m(); মেথডেই এক্সেপশন try থেকে throw করে, ক্যাচ ব্লক দিয়ে রিসিভ করে এক্সেপশন হ্যান্ডেল করে ফেলেছে।আউটপুট টা শুধু মেইন মেথডে পাঠাইসে তাই এইখানে কিছুই লাগেনি।

throw keyword: Built in এক্সেপশন হইলে জাভা Auto থ্রো করে, 

কিন্তু আমরা যখন নিজের দেয়া শর্তের মধ্যে কোনো এক্সেপশন থ্রো করতে চাই তখনতো আর জাভা কাজটা করে দিবে না, তাই আমরা  এক্সেপশন থ্রো করতে throw  ইউজ করব। throw ইউজ করলে এক্সেপশন থ্রো হবে, then  আগের এক্সেপশন যেভাবে হ্যান্ডেল করেছি এইটাও ঐভাবেই হ্যান্ডেল করতে পারব । আমরা ক্যাচ মেথডের মাধ্যমেউ রিসিভ করতে পারি, ক্যাচ না করলে JVM  নিজের ক্যাচ মেকানিজম দিয়ে রিসিভ করবে , then  এক্সেপশন show করে প্রোগ্রাম বন্ধ করে দিবে

থ্রো এর ব্যবহার তো এতক্ষনে জেনে গেছেন হইতো, থ্রো দিয়ে আমরা নিজের ইচ্ছা মত শর্ত দিয়ে এক্সেপশন থ্রো করতে পারি। তো কথা হচ্ছে throw keyword ArithmeticException, IOException,SQLException  এগুলা থ্রো করার জন্য না, এগুলাও করা যায়। কিন্তু মূলত এটার আবির্ভাব হইসে User Define Exception  throw করার জন্য  ।।।

মানে ৫/০ এইটা জাভার কাছে ArithmeticException , কিন্তু আপনার কখনো এমন দরকার পড়তে পারে যে ৫/২ ইনপুট করলে এক্সেপশন থ্রো করতে চান  IntegerResultNotFound  তো এগুলা আপনি নিজে নিজে বানাইতে পারবেন, এগুলা পরের পোষ্টে থাকবে ইনশাল্লাহ।






                  

 <-Previous Topic                                   Next Topic -> User Define Exception



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