এর
আগের একটা পোস্টে থ্রো, ক্যাচ খেলার ৪ টা পদ্ধতির কথা বলেছিলাম, এখন তার প্রাকটিক্যাল
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 ব্লক থেকে আমাদের দেয়া শর্ত সাপেক্ষে এক্সেপশন থ্রো
হবে আমরা শুধু ক্যাচ ব্লক লিখে ঐ টার মাধ্যমে রিসিভ করেছি।তাহলে আমরা থ্রো করলাম, আমরা
ক্যাচ করলাম।

Comments
Post a Comment