try
ব্লক: কোন কোড ব্লকে যদি এরর হওয়ার সম্ভাবনা থাকে তাহলে সেই কোডকে try ব্লকের
মধ্যে রাখতে হয়।
catch: try ব্লকের সঙ্গেই catch ব্লক লিখতে হয়। একটি try ব্লকের সঙ্গে একাধিক catch ব্লক থাকতে পারে।তবে একটি ক্যাচ অথবা finally থাকতেই হবে try এর সাথে
try
ব্লকের কোডে যদি এরর হয় তখন try ব্লক একটা এক্সেপশন থ্রো করে আর catch ব্লক সেই এক্সেপশন
রিসিভ করে পরের কোড এক্সিকিউট করে।
public
class Main{
public static void main(String[] args){
try{
System.out.println(5/0);
} catch(ArithmeticException
jekonoVariableName){
//যদি try ব্লকে আসলেই এরর টা হয় তাহলে এই ক্যাচ ব্লক //এক্সিকিউট হবে নাহলে try থেকে পরের গুলাই চলে যাবে ক্যাচ ব্লকে আসবে না।
System.out.println(“Catch
block executed”);
}
}
}
উপরের
(5/0) এক্সেপশনটা কোন ধরনের বলেন তো?
Ans:
ArithmeticException // (যোগ, বিয়োগ,গুণ,ভাগ
জনিত Exception)
এটা
কিন্তু Unchecked Exception, কারণ কম্পাইলার
এটা চেক করতে পারেনা।
try{
System.out.println(5/0);
}catch(ArithmeticException
obj){ //ArithmeticException class er object,
System.out.println(“Catch
block”);
}
কারণ (5/0) এক্সেপশন যখন আসবে তখন জাভা একটা এক্সেপশন
থ্রো করবে, আর ঐটা আমরা ক্যাচ ব্লকের মাধ্যমে রিসিভ করবো, যাতে জাভার ডিফল্ট ক্যাচ
ব্লকের কাছে না যায়, তাই আমরা নিজেরা ক্যাচ ব্লক লিখেছি,
আর
যে ক্যাচ ব্লক লিখলাম সেটা কোন ধরনের এক্সেপশন রিসিভ করতে পারবে আমাদের এটাও বলে দেয়া
লাগবে। ArithmeticException.
মানে ক্যাচ ব্লকের মধ্যে এক্সেপশন ক্লাসের বাচ্চাদের নাম ইউজ করা লাগবে(ArithmeticException, FileNotFoundException etc etc)
যদি ArithmeticException ঘটে শুধু তাহলেই ঐ ক্যাচ ব্লক কাজ করবে, ধরেন,
যদি ArithmeticException ঘটে শুধু তাহলেই ঐ ক্যাচ ব্লক কাজ করবে, ধরেন,
public
class Main{
public static void main(String[] args){
try{
int [] n=new int [5];
System.out.println(n[10]);
}catch(ArithmeticException e){
System.out.println(“It
works if Arithmetic exception occurs”);
}
}
}
উপরের কোডে কিন্তু try, catch কাজ করবে না, কেন?
কারণ আমরা ক্যাচ ব্লকের মধ্যে কোন এক্সেপশন রিসিভ করেছি?
ArithmeticException. কিন্তু আমাদের try ব্লকের
মধ্যে এক্সেপশন হবে ArrayIndexOutOfBoundsException.
তাই আমাদের এই কোড এইবার catch ব্লকের মধ্যে ArrayIndexOutOfBoundsException খোজার
চেষ্টা করবে, খুজে না পেয়ে জাভার ডিফল্ট ক্যাচ ব্লকে চলে যাবে এবং এক্সেপশন প্রিন্ট
করার মাধ্যমে আমাদের প্রোগ্রাম বন্ধ করে দিবে। আমরা যদি এটাকে হ্যান্ডেল করতে চাই,
তাহলে কোড টা এমন হতে হবেঃ
public class Main{
public static void main(String[] args){
try{
int [] n=new int [5];
System.out.println(n[10]);
} catch(ArithmeticException e){
System.out.println(“It
works if Arithmetic exception occurs”);
}catch(ArrayIndexOutOfBoundsException obj){
System.out.println(“Exception:
“+obj.getMessage());
}
System.out.println(“After Exceptions”);
}
}
তাহলে এইবার কি হবে?
try ব্লকের মধ্যে ArrayIndexOutOfBoundsException হবে এবং জাভা এক্সেপশনটি থ্রো করবে ক্যাচ ব্লকের কাছে, যেহেতু আমরা ক্যাচ ব্লক লিখেছি, তাই জাভা নিজের ক্যাচ ব্লকে না যেয়ে আগে আমাদের ক্যাচ ব্লক গুলা চেক করবে যে ঐ এক্সেপশন রিসিভ করার মতো কেউ আছে কিনা। প্রথম ক্যাচ ব্লক ArithmeticException রিসিভ করতে চাই, তাই এইবার পরের ক্যাচ ব্লকের কাছে যাবে এবং সেখানে ArrayIndexOutOfBoundsException receiver পেয়ে যাবে তাই ঐ ক্যাচ ব্লক থেকে এক্সিকিউট হবে।
try ব্লকের মধ্যে সব থেকে কম কোড লিখা উচিত, কারণ যেই লাইনে
এক্সেপশন হবে তার পরের লাইন থেকে আর কাজ করবে না।
ধরেন try ব্লকের মধ্যে ৩ লাইন কোড লিখেছেন, দুই নাম্বার লাইনে যদি এক্সেপশন পেয়ে যায় তাহলে ওইখান থেকেই ক্যাচ ব্লকে দৌড় দিবে, ঐ তিন নাম্বার লাইনটা আর এক্সিকিউট হবে না।
Throwable ক্লাসে কতগুলো পাবলিক মেথড রয়েছে।
এগুলো ব্যবহার করে কোনো এক্সেপশন কোথায় হয়েছে , কেন হয়েছে
তার কারণগুলো খুজে বের করা যায়। মেথডগুলো হলো,
getMessage(): কেন এরর হইসে শুধু এটা প্রিন্ট করবে ছোট করে।যেমনঃ / by zero.
toString(): এক্সেপশনের নাম আর কেন হইসে এটা প্রিন্ট করবে।যেমনঃ java.lang.ArithmeticException , / by zero
printStackTrace(): এক্সেপশনের নাম, ঠিকানা ,কেন হইসে। ঠিকানা মানে প্যাকেজ নাম,ক্লাস নাম,কত নাম্বার লাইনে এরর সব প্রিন্ট করে দিবে।যেমনঃ java.lang.ArithmeticException , / by zero, উমুক প্যাকেজ, তমুক ক্লাস, উমুক মেথড, এত নাম্বার লাইন সব।
Finally...
Finally ব্লক নিয়ে কিছু বলে নেই, try ব্লক
ছাড়া finally থাকতে পারবে না।
Syntax:
try{
//Exception
আসতে পারে এমন কোডস
}
catch{
//Handling
Exception
}
finally{
//এক্সিকিউট
হতে বাধ্য লাইনস
}
১। Finally ব্লক Optional, কোনো লাইন
যদি এক্সিকিউট করতেই হবে এমন থাকে তাহলে এটা ইউজ করব , নাহলে দরকার নেই।
২। try ব্লকে এক্সেপশন থাকলেও এটা এক্সিকিউট হবে, এক্সেপশন
না থাকলেও এটা এক্সিকিউট হবে।
পোষ্ট -১ থেকে পড়লে বেশি ভাল বুঝবেন।
<-Previous Topic Next Topic->catch-throw
Move to:
Post 7 Post 8
Post 6 Post 9
Post 5
Post 4
Post 3
Post 2
Post 1

Comments
Post a Comment